【问题标题】:Float Value Is Lost in Int [duplicate]浮点值在 Int 中丢失 [重复]
【发布时间】:2013-02-11 09:55:05
【问题描述】:

试图将 float 转换为 int,但缺少一些东西

float submittedAmount = 0.51f;

int amount = (int)(submittedAmount * 100);

为什么答案是 50?

【问题讨论】:

标签: c# .net casting floating-point int


【解决方案1】:

由于浮点运算,相乘后的值不完全是 51。当我现在尝试时,*0.51f * 100* 给出了结果 50.9999990463257

当您将 50.9999990463257 解析为 int 时,您肯定会得到 50

如果您希望这样的计算准确,则必须使用decimal 之类的类型,而不是float

如果您想了解原因,请阅读我在下面链接的文章。

What Every Computer Scientist Should Know About Floating-Point Arithmetic

【讨论】:

    【解决方案2】:

    试试

    int amount = (int)(submittedAmount * 100.0);
    

    当你写0.51f 不完全是0.51

    阅读这篇名为 What Every Computer Scientist Should Know About Floating-Point Arithmetic 的精彩文章

    【讨论】:

    • 将 100 更改为 100.0 有何帮助?你读过这篇文章吗? ;)
    【解决方案3】:

    使用转换类。否则答案仍然是 50。

     var amount  = Convert.ToInt32(submittedAmount * 100.0));
    

    【讨论】:

      【解决方案4】:

      0.51f 实际上是0.509999999999。因为浮点数不精确。

      我想补充一点,不要使用float 进行货币计算。请改用decimal

      【讨论】:

        猜你喜欢
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 2015-02-21
        • 1970-01-01
        • 2014-05-09
        相关资源
        最近更新 更多