5

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

float submittedAmount = 0.51f;

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

这是手表。 查看变量值

为什么答案是 50?

4

4 回答 4

5

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

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

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

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

每个计算机科学家都应该知道的关于浮点运算的知识

于 2013-02-11T09:58:19.093 回答
1

尝试

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

当你写0.51f的不完全是0.51

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

于 2013-02-11T09:58:13.023 回答
0

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

 var amount  = Convert.ToInt32(submittedAmount * 100.0));
于 2013-02-11T10:00:50.360 回答
0

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

我想补充一点,不要float用于货币计算。改为使用decimal

于 2013-02-11T10:01:44.760 回答