我在Python中寻找基于有效数字(数字)的字符串转换函数/模块。这个功能的用处已经出现了好几次,所以很难相信Python 仍然没有功能或模块来轻松完成这项工作。有谁知道有什么新的东西出来了吗?如果没有,这是一个功能请求的好机会吗?
免责声明:
功能示例:
>>> from somemodule import SDStr
>>> SDStr(num=1234, sigDigs=3)
'1230'
>>> SDStr(num=12.3456, sigDigs=4)
'12.35'
>>> SDStr(num=100, sigDigs=3)
'100.'
>>> SDStr(num=100.0, sigDigs=2)
'100'
>>> SDStr(num=100, sigDigs=4)
'100.0'
>>> SDStr(num=0.001234, sigDigs=2)
'0.0012'
答案 0 :(得分:0)
import decimal
def rounded(number, figures):
number = decimal.Decimal(number)
return format(round(number, -number.adjusted()-1+figures), "f")
decimal
跟踪小数位数,所以显然这是做事的方式。
我只是根据最重要数字的位置调整有效数字的数量,并将其格式化为浮点数。它就像一个魅力。
编辑:由于某些原因,Python 2不喜欢这个。我会调查一下。
好吧,基本上在Python 2中round
强制转换为float
(严重的是,转到Python 3),所以答案很简单:
from decimal import Decimal
def rounded(number, figures):
number = Decimal(number)
decimal_shift = -number.adjusted()-1+figures
integral = round(number * Decimal(10) ** decimal_shift)
rounded_decimal = Decimal(integral) * Decimal(10) ** -decimal_shift
return format(rounded_decimal, "f")