我正在尝试在Python中截断小数值。我不想四舍五入,而是只想显示指定精度的小数值。我尝试了以下方法:
d = 0.989434
'{:.{prec}f}'.format(d, prec=2)
这会将其舍入为0.99。但我实际上希望输出为0.98。显然,round()
不是一个选项。有什么办法可以做到这一点吗?还是我应该回到代码并将所有内容更改为decimal
?
谢谢。
我正在尝试在Python中截断小数值。我不想四舍五入,而是只想显示指定精度的小数值。我尝试了以下方法:
d = 0.989434
'{:.{prec}f}'.format(d, prec=2)
这会将其舍入为0.99。但我实际上希望输出为0.98。显然,round()
不是一个选项。有什么办法可以做到这一点吗?还是我应该回到代码并将所有内容更改为decimal
?
谢谢。
你可以使用以下代码
import decimal
d = 0.989434
print decimal.Decimal(d).quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
我不知道你的所有要求,但这将非常健壮。
>> before_dec, after_dec = str(d).split('.')
>> float('.'.join((before_dec, after_dec[0:2])))
0.98
这个答案不够健壮,也不是数学上正确的。请参见下面Nilani Algiriyage的答案,使用Decimal.quantize
方法进行正确处理。
after_dec[:2]
就足够了 :) - thefourtheyed = 0.989434
print floor(d * 100) / 100
Math.floor(x) 返回 x 的下取整值,即小于或等于 x 的最大整数。
将小数 '.' 左边的 2 位数字移动,然后向下取整,最后再移回 '.' 右边的数字。
可以通过以下方式修改 100:
n = 2
m = pow (10, n)
d = 0.989434
print floor(d * m) / m
n
是你想要的精度。
编辑:
如果 d
是负数,则必须使用 ceil 方法。
if d < 0:
print ceil(d * m) / m
else:
print floor(d * m) / m
d = -0.989434
,这将打印出 -0.99
。 - Eric将其格式化为更长的内容,然后截断额外的数字:
def truncate(f, digits):
return ("{:.30f}".format(f))[:-30+digits]
我认为这是最好的方法。
Move the number of digits moved to left, to right
d = 0.989434
print "{0:0.2f}".format(int(d * 100)/100.0)
Output
0.98
import math
d = 0.989434
prec = 2
output = math.floor(d * (10 ** prec)) / (10 ** prec)
d = -0.989434
,这将打印 -0.99
。 - Ericd = 0.989434
x = int(d * 100.0) / 100.0
print "{0:0.2f}".format(x)
d = 0.989434
print '{:.{prec}s}'.format(str(d), prec=4)
d = str(0.989434)
print float(d[:d.find('.')+3])
d = 0.989434
print str(d)[0:4] #or print(str(d)[0:4])
decimal.Decimal
,而是一个float
。 - Eric