我将Decimal模块用于大数字,但是对于小于0.00001的值,它会变成科学记数法。有没有办法禁用它,以便显示所有小数位:
round(Decimal(str(value)), 9)
'{0:f}'。format(value)不起作用,因为它显示所有数字,例如0.0000100000而不是0.00001
我想要的是在舍入0.0000000015之后显示0.000000002。
我试过
def set_decimals(self, value, decimals):
val = '{0:f}'.format(Decimal(str(value)))
rnd_value = round(Decimal(val), decimals)
return str(rnd_value)
但它仍将其转换为科学记数法
感谢。
答案 0 :(得分:1)
我找不到更好的解决方案:
def regularNotation(value):
"""Sometimes str(decimal) makes scientific notation. This function makes the regular notation."""
v = '{:.14f}'.format(value).rpartition('.') # 14 digits in fractional part
return v[0] + (v[1] + v[2]).rstrip('.0') # strip trailing 0s after decimal point
答案 1 :(得分:0)
'{0:f}'.format(value)
未返回您想要的内容,因为float
类型的默认格式化程序会以固定大小截断。但Decimal
本身并非如此:
>>> '{0:f}'.format(Decimal(str(0.0000000000000001)))
'0.0000000000000001'
默认情况下,使用的格式为'g'
'G'
,具体取决于具体情况。