我想把一个浮点数表示成一个四舍五入到某个有效数字的字符串,而不使用指数格式。基本上,我想显示任何浮点数,并确保它“看起来不错”。
这个问题有几个部分:
我已经想出了一个办法,虽然看起来像是一个工作回合,它不是很完美。(最大精度为15位有效数字。)
>>> def f(number, sigfig):
return ("%.15f" % (round(number, int(-1 * floor(log10(number)) + (sigfig - 1))))).rstrip("0").rstrip(".")
>>> print f(0.1, 1)
0.1
>>> print f(0.0000000000368568, 2)
0.000000000037
>>> print f(756867, 3)
757000
有更好的办法吗?为什么Python没有一个内置的函数来处理这个问题?
如果需要浮点精度,则需要使用
decimal
模块,它是Python Standard Library的一部分:它似乎没有内置的字符串格式化技巧,允许您(1)打印第一个有效数字出现在小数点后15位的浮点,以及(2)不在科学记数法中。这样就只剩下手动字符串操作了。
下面我使用
decimal
模块从浮点中提取十进制数字。float_to_decimal
函数用于将浮点转换为Decimal
对象。很明显,decimal.Decimal(str(f))
是错误的,因为str(f)
可能会丢失有效数字。从decimal module's documentation中取出
float_to_decimal
。一旦十进制数字作为整数的元组获得,下面的代码就做了一件显而易见的事情:切掉所需的单数位数,如有必要进行四舍五入,将这些数字组合成一个字符串,在一个符号上加上一个点,并在适当的情况下在左侧或右侧放置一个小数点和零。
在底部,您会发现一些我用来测试
f
函数的案例。下面是根据给定的错误栏设置值格式的代码段。
示例:
相关问题 更多 >
编程相关推荐