12

如何截断像 315.15321531321 这样的输入我想截断百分之一位置之后的所有值,使其变为 315.15

我怎么做?

4

8 回答 8

13

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 的值……不确定这是否是您所说的“截断”。

于 2009-06-09T00:32:27.573 回答
9

看起来 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
于 2014-03-07T13:04:33.743 回答
6

如果您使用货币金额,我强烈建议您改用 Python 的十进制类:http: //docs.python.org/library/decimal.html

于 2009-06-09T00:50:08.083 回答
3

如果您只想显示缩短,可以使用"%f"格式化标志:

value = 315.123123123
print "Value is: %.2f" % value

如果您想真正切断“附加”数字,请执行以下操作:

from math import trunc
value = trunc(value*100)/100
于 2009-06-09T00:33:23.390 回答
1

内置功能round()

>>> num = 315.1532153132
>>> round(num, 2)
3.1499999999999998
于 2009-06-09T00:33:44.340 回答
1

您有几个选项 - 您可以使用 round() 对数字进行四舍五入,但这可能会导致一些不准确(例如,315.15 可能会四舍五入为 315.150000003)。如果您只是想在显示浮点数时截断它的值,则可以使用 printf("%.2f", mynumber) 指定输出的宽度。这可能是一个更好的解决方案,因为在不了解您的特定应用程序的情况下,通常保留数字的整个长度进行计算是一个好主意。

于 2009-06-09T00:34:52.247 回答
1

也许这会帮助你:

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

享受!

于 2017-03-02T16:41:21.587 回答
0

在使用Decimal类型和货币时,金额需要精确,这是我想出的截断为美分(百分之一)的方法:

amount = Decimal(long(amount * 100)) / Decimal(100)

一点历史:我尝试过quantize,但它倾向于舍入而不是截断。而且我不能凭良心将昂贵的字符串格式化程序用于如此简单的事情。最后我不想要任何精度问题,float所以我使用非常具体的铸造,这可能是矫枉过正。

于 2015-01-06T21:09:36.657 回答