【问题标题】:How to increase the precision of float values to more than 10 in python? [duplicate]如何在python中将浮点值的精度提高到10以上? [复制]
【发布时间】:2016-02-25 05:44:58
【问题描述】:

daily_raw_consumption = float(daily_rate) * float(rep_factor)

float(daily_raw_consumption)

默认情况下,rep_factor 被转换为精度为 10 的值。例如:

实际: 60.8333333333

我需要什么: 60.833333333333333333

是否可以修改精度而不将其转换为十进制

【问题讨论】:

标签: python python-2.7 python-3.x precision


【解决方案1】:

考虑使用Decimal 代替浮点数

from decimal import *
daily_rate = 1
rep_factor = 3
getcontext().prec = 30 # set precision to 30
daily_raw_consumption = Decimal(daily_rate) / Decimal(rep_factor)
print(daily_raw_consumption) # 0.333333333333333333333333333333

【讨论】:

  • 是否可以在不使用十进制转换的情况下做到这一点。我正在寻找这种类型的建议。
  • @JustCoder 啊,我明白了……不。 :( 你的例子中的数字精度是 20 位:60.833333333333333333float 不可能像 20 位一样精确。它的最大精度大约是 15 到 16 位:60.8333333333333。既然你已经有了点前2位,最多只能在点后保留13位以保持其精度:print ('{0:.13f}'.format(daily_raw_consumption))使用float不能比这更精确。只有decimal可以去高达 28 位精度。
【解决方案2】:
 print '{0:.50f}'.format(22/7.0)

根据你的情况

print '{0:.50f}'.format(daily_raw_consumption)

【讨论】:

  • 好答案我喜欢这个...除了它确实忽略了 50 精度浮点数可能不准确...(+1 都一样)
  • @JoranBeasley 是的,非常接近。对于 22/7.0 示例,它缺少一个数字 :-)
  • 但这是一个神奇的...考虑像1/3.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多