试图将 float 转换为 int 但缺少一些东西
float submittedAmount = 0.51f;
int amount = (int)(submittedAmount * 100);
为什么答案是 50?
试图将 float 转换为 int 但缺少一些东西
float submittedAmount = 0.51f;
int amount = (int)(submittedAmount * 100);
为什么答案是 50?
由于浮点算法,相乘的值不完全是51。当我现在尝试时, *0.51f * 100* 给出了结果50.9999990463257。
当您将50.9999990463257解析为 int 时,您肯定会得到50。
如果您希望这样的计算准确,则必须使用类似的类型decimal
而不是float
.
如果您想了解原因,请阅读我在下面链接的文章。
尝试
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
。