【问题标题】:Python:computing the number of digits after decimal gives wrong answerPython:计算小数点后的位数给出错误答案
【发布时间】:2017-10-02 18:38:14
【问题描述】:

我的一个表单中有一个浮点字段,将其视为 field_x。基于那个 field_x 我有一些计算。 毕竟如果field_x小数点后有n位,结果也应该有n位。

例如: field_x = 0.00000001(小数点后n位)

结果 = 一些计算

如果结果 = 22 我必须将其显示为 22.00000000(小数点后 n 位)

len(str(number-int(number))[1:])给出答案

**这里的数字可以是0.00101,0.110,0.787等

但是对于像 0.000001 这样的一些值,它给出的答案不正确

【问题讨论】:

  • 对于你的例子,字符串是1e-06 !!方法不对。
  • 是的,我知道..这就是为什么要求回答
  • 浮点数的内部表示可能会让您大吃一惊。因此,当将 0.00001 输入到 decimal.Decimal 对象时,我得到 0.000010000000000000000818030539140313095458623138256371021270751953125 ... 很难回答这个问题。如果数字是从文件中输入/读取的,则使用字符串表示来计算您的值,不要强制转换为浮点数。
  • 是的......我试过......如果它的十进制。十进制()它没问题
  • 抱歉,如果您在浮点数中输入数据,因为在将字符串转换为浮点数时会丢失精度,这是不可能的。你能扩大你的问题。数字从何而来?

标签: python-2.7 floating-point decimal odoo-8


【解决方案1】:

我在任何地方都没有找到这个问题的正确答案。 要么我们需要使用在 odoo 中不可能的双精度,要么我们必须转换为字符串并获得指数长度。 我选择了第二个。 谢谢

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多