【发布时间】:2013-02-11 09:55:05
【问题描述】:
试图将 float 转换为 int,但缺少一些东西
float submittedAmount = 0.51f;
int amount = (int)(submittedAmount * 100);
为什么答案是 50?
【问题讨论】:
-
在转换为 int 之前,您可能需要对浮点数进行舍入。
标签: c# .net casting floating-point int
试图将 float 转换为 int,但缺少一些东西
float submittedAmount = 0.51f;
int amount = (int)(submittedAmount * 100);
为什么答案是 50?
【问题讨论】:
标签: c# .net casting floating-point int
由于浮点运算,相乘后的值不完全是 51。当我现在尝试时,*0.51f * 100* 给出了结果 50.9999990463257。
当您将 50.9999990463257 解析为 int 时,您肯定会得到 50。
如果您希望这样的计算准确,则必须使用decimal 之类的类型,而不是float。
如果您想了解原因,请阅读我在下面链接的文章。
What Every Computer Scientist Should Know About Floating-Point Arithmetic
【讨论】:
试试
int amount = (int)(submittedAmount * 100.0);
当你写0.51f 不完全是0.51
阅读这篇名为 What Every Computer Scientist Should Know About Floating-Point Arithmetic 的精彩文章
【讨论】:
使用转换类。否则答案仍然是 50。
var amount = Convert.ToInt32(submittedAmount * 100.0));
【讨论】:
0.51f 实际上是0.509999999999。因为浮点数不精确。
我想补充一点,不要使用float 进行货币计算。请改用decimal。
【讨论】: