在Int。中浮动值丢失

时间:2013-02-11 09:55:06

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

尝试将float转换为int但是缺少了一些东西

float submittedAmount = 0.51f;

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

here is watch. look at the variable values

为什么答案是50?

4 个答案:

答案 0 :(得分:5)

由于浮点aritmethics,乘法值不完全 51 。当我现在尝试时,* 0.51f * 100 *给出了结果 50.9999990463257

当你解析 50.9999990463257 和int时,你肯定会得到 50

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

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

What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 1 :(得分:1)

尝试

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

撰写时,0.51f并不完全是0.51

阅读这篇名为What Every Computer Scientist Should Know About Floating-Point Arithmetic

的精彩文章

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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