如何在python中显示两个小数点,当一个数字可以完全整除时?
How to display two decimal points in python, when a number is perfectly divisible?
目前我正在尝试解决一个问题,我应该将答案打印到小数点后两位 而不四舍五入。为此,我使用了以下代码
import math
a=1.175 #value of a after some division
print(math.floor(a*100)/100)
我们得到的输出是:
1.17 #Notice value which has two decimal points & not rounded
但当我尝试打印一个可整除的数字时,真正的问题开始了,小数点后只显示一个零。我使用了与上面相同的代码,但是现在
a=25/5 #Now a is perfectly divisible
print(math.floor(a*100)/100)
现在显示的输出是
5.0 #Notice only one decimal place is printed
纠正这个错误必须做什么?
您可以在官方Python教程中找到此推荐:15. Floating Point Arithmetic: Issues and Limitations。
For more pleasant output, you may wish to use string formatting to produce a limited number of significant digits
print("%.2f" % 3.0)
3.00
或
format(3.0, ".2f")
'3.00'
除法有效,结果 returns 足够精确。
所以你的问题只是关于可视化或者完全是:
- string-representation 个 floating-point 个
格式化小数
您可以使用 string-formatting。
例如在Python3中,使用f-strings:
twoFractionDigits = f"{result:.2f}"
或print(f"{result:.2f}")
这个技巧 .2f
,字符串 格式化文字 或 格式说明符 表示 floating-point 数字(f
) 在 decimal-point (.2
) 之后有两位小数。
另请参阅:
- How to format a floating number to fixed width in Python
试试 Python-shell:
Python 3.6.9 (default, Dec 8 2021, 21:08:43)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> a=1.175 #value of a after some division
>>> result = math.floor(a*100)/100
>>> result
1.17
>>> print(result)
1.17
>>> a=25/5 #Now a is perfectly divisible
>>> result = math.floor(a*100)/100
>>> result
5.0
>>> print(result)
5.0
>>> print(f"{result:.2f}")
5.00
将小数格式化为百分比
类似的你可以用百分比表示比率:
print(f"{result:.2f} %")
打印:
5.00 %
格式化百分比的快捷方式可以是:
print(f"{25/100:.2%}")
它将 25/100 == 0.25
的结果转换为:
25.00%
注:formatting-literal .2%
自动从比率转换为百分比,在decimal-point后加上2位数字,并添加percent-symbol.
使用特定 scale 格式化小数(四舍五入或截断?)
现在没有rounding-off的部分,只是截断了。
例如,我们可以使用 repeating decimal,例如1/6
需要 rounded 或 truncated (cut-off) 在固定数量的小数位后 - scale(对比 precision)。
>>> print(f"{1/6:.2}")
0.17
>>> print(f"{1/6:.2%}")
16.67%
请注意格式化字符串如何不被截断(至 0.16
)而是四舍五入(至 0.17
)。这里 scale 在 formatting-literal 内被指定为 2
(在点之后)。
另请参阅:
- Truncate to three decimals in Python
- How do I interpret precision and scale of a number in a database?
- What is the difference between precision and scale?
以固定宽度(前导空格)格式化许多小数
另一个例子是打印多个小数,比如在一列中作为right-aligned,这样你就可以很容易地比较它们。
然后使用string-formatting文字6.2f
添加前导空格(这里是fixed-width of 6):
>>> print(f"{result:6.2f}")
5.00
>>> print(f"{100/25*100:6.2f}")
400.00
>>> print(f"{25/100*100:6.2f}")
25.00
另见
此处演示的所有 formatting-literal 也可以使用
应用
- old-style %-formatting(也称为“Modulo string formatting”)继承自C语言的
printf
method。好处:这种方式也兼容Python before 3.6).
- new-style
.format
字符串方法(在 Python 3 中引入)
请参阅 ,其中展示了这些备选方案。
在 Python 中了解有关 string-formatting 的更多信息:
目前我正在尝试解决一个问题,我应该将答案打印到小数点后两位 而不四舍五入。为此,我使用了以下代码
import math
a=1.175 #value of a after some division
print(math.floor(a*100)/100)
我们得到的输出是:
1.17 #Notice value which has two decimal points & not rounded
但当我尝试打印一个可整除的数字时,真正的问题开始了,小数点后只显示一个零。我使用了与上面相同的代码,但是现在
a=25/5 #Now a is perfectly divisible
print(math.floor(a*100)/100)
现在显示的输出是
5.0 #Notice only one decimal place is printed
纠正这个错误必须做什么?
您可以在官方Python教程中找到此推荐:15. Floating Point Arithmetic: Issues and Limitations。
For more pleasant output, you may wish to use string formatting to produce a limited number of significant digits
print("%.2f" % 3.0)
3.00
或
format(3.0, ".2f")
'3.00'
除法有效,结果 returns 足够精确。
所以你的问题只是关于可视化或者完全是:
- string-representation 个 floating-point 个
格式化小数
您可以使用 string-formatting。 例如在Python3中,使用f-strings:
twoFractionDigits = f"{result:.2f}"
或print(f"{result:.2f}")
这个技巧 .2f
,字符串 格式化文字 或 格式说明符 表示 floating-point 数字(f
) 在 decimal-point (.2
) 之后有两位小数。
另请参阅:
- How to format a floating number to fixed width in Python
试试 Python-shell:
Python 3.6.9 (default, Dec 8 2021, 21:08:43)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> a=1.175 #value of a after some division
>>> result = math.floor(a*100)/100
>>> result
1.17
>>> print(result)
1.17
>>> a=25/5 #Now a is perfectly divisible
>>> result = math.floor(a*100)/100
>>> result
5.0
>>> print(result)
5.0
>>> print(f"{result:.2f}")
5.00
将小数格式化为百分比
类似的你可以用百分比表示比率:
print(f"{result:.2f} %")
打印:
5.00 %
格式化百分比的快捷方式可以是:
print(f"{25/100:.2%}")
它将 25/100 == 0.25
的结果转换为:
25.00%
注:formatting-literal .2%
自动从比率转换为百分比,在decimal-point后加上2位数字,并添加percent-symbol.
使用特定 scale 格式化小数(四舍五入或截断?)
现在没有rounding-off的部分,只是截断了。
例如,我们可以使用 repeating decimal,例如1/6
需要 rounded 或 truncated (cut-off) 在固定数量的小数位后 - scale(对比 precision)。
>>> print(f"{1/6:.2}")
0.17
>>> print(f"{1/6:.2%}")
16.67%
请注意格式化字符串如何不被截断(至 0.16
)而是四舍五入(至 0.17
)。这里 scale 在 formatting-literal 内被指定为 2
(在点之后)。
另请参阅:
- Truncate to three decimals in Python
- How do I interpret precision and scale of a number in a database?
- What is the difference between precision and scale?
以固定宽度(前导空格)格式化许多小数
另一个例子是打印多个小数,比如在一列中作为right-aligned,这样你就可以很容易地比较它们。
然后使用string-formatting文字6.2f
添加前导空格(这里是fixed-width of 6):
>>> print(f"{result:6.2f}")
5.00
>>> print(f"{100/25*100:6.2f}")
400.00
>>> print(f"{25/100*100:6.2f}")
25.00
另见
此处演示的所有 formatting-literal 也可以使用
应用- old-style %-formatting(也称为“Modulo string formatting”)继承自C语言的
printf
method。好处:这种方式也兼容Python before 3.6). - new-style
.format
字符串方法(在 Python 3 中引入)
请参阅
在 Python 中了解有关 string-formatting 的更多信息: