我认为这个问题本质上是有缺陷的。0.200
和之间不仅没有真正的区别0.2
,而且计算机不以十进制格式存储数据,而只是二进制。(为此,计算机可能仅仅因为精度问题而存储0.2
as 0.20000000000000000000001
,但由于二进制表示的限制,这实际上不可能在存储级别截断。)
如果您只想打印三个有效数字的值,您可以使用
print "%.3f" % float_var
如果您想将所有未来的计算四舍五入到小数点后三位,请使用
round(float_var,3)
但就实际计算而言,没有任何收获。无论您使用的是 Python、C、Java 还是铅笔和纸,0.200
它对计算的影响都是一样的。0.2
编辑:如果您真的需要有效数字,则没有理由不能在列表中使用 Decimal 对象。https://docs.python.org/2/library/decimal.html提供了一种相当快速的方法来将它们从字符串中整体转换:
data = map(Decimal, '1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split())
或者,如果您已经有一个浮点数组需要将其带到三位有效数字,您可以这样做:
import decimal
def toDecimal(x): # x is a float.
return decimal.Decimal(str(x)).quantize(decimal.Decimal('1.000'))
data = map(toDecimal, float_var_list)
就计算有效数字的数量而言,我认为没有内置函数可以解决这个问题,但是玩字符串会给你一个答案,而不会有太多麻烦。
def numDigits(x): # x is a Decimal object.
splitDecimal = str(x).split(".")
return len(splitDecimal[1])