如何截断像 315.15321531321 这样的输入我想截断百分之一位置之后的所有值,使其变为 315.15
我怎么做?
python 2.x下的字符串格式化应该为你做:
>>> print '%.2f' % 315.15321531321
315.15
这将字符串表示形式限制为小数点后 2 位。请注意,如果您使用round(315.153215, 2)
,您最终会得到另一个浮点值,这自然是不精确的(或过于精确,取决于您如何看待它):
>>> round(315.15321531321, 2)
315.14999999999998
从技术上讲,round()
是正确的,但它不会按照您在315.15
. 此外,如果您对 315.157 之类的值进行四舍五入,它将产生更接近 315.16 的值……不确定这是否是您所说的“截断”。
看起来 print "%.2f" 也会进行舍入。这是舍入和截断的 Python 代码
num = 315.15627
print("rounded = %.2f" % num)
print("truncated = %.2f" % (int(num*100)/float(100)))
print(f'rounded = {num:.2f}')
print(f'truncated = {int(num*100)/float(100):.2f}')
**Outputs**
rounded = 315.16
truncated = 315.15
rounded = 315.16
truncated = 315.15
如果您使用货币金额,我强烈建议您改用 Python 的十进制类:http: //docs.python.org/library/decimal.html
如果您只想显示缩短,可以使用"%f"
格式化标志:
value = 315.123123123
print "Value is: %.2f" % value
如果您想真正切断“附加”数字,请执行以下操作:
from math import trunc
value = trunc(value*100)/100
内置功能round()
:
>>> num = 315.1532153132
>>> round(num, 2)
3.1499999999999998
您有几个选项 - 您可以使用 round() 对数字进行四舍五入,但这可能会导致一些不准确(例如,315.15 可能会四舍五入为 315.150000003)。如果您只是想在显示浮点数时截断它的值,则可以使用 printf("%.2f", mynumber) 指定输出的宽度。这可能是一个更好的解决方案,因为在不了解您的特定应用程序的情况下,通常保留数字的整个长度进行计算是一个好主意。
也许这会帮助你:
a=315.15321531321
a=a*100
a=int(a)
a=a/100.0
print(a)
315.15
说明:如果要四舍五入到小数点后第二位,那么您应该:
1. 将您的数字乘以 100;这给你 31515.321531321,
2. 将这个新数字转换为整数;int(31515.321531321) 给你 31515,
3. 除以 100.0; 31515/100.0,
4. 你得到正确答案;315.15
享受!
在使用Decimal
类型和货币时,金额需要精确,这是我想出的截断为美分(百分之一)的方法:
amount = Decimal(long(amount * 100)) / Decimal(100)
一点历史:我尝试过quantize
,但它倾向于舍入而不是截断。而且我不能凭良心将昂贵的字符串格式化程序用于如此简单的事情。最后我不想要任何精度问题,float
所以我使用非常具体的铸造,这可能是矫枉过正。