【发布时间】:2013-01-27 08:05:07
【问题描述】:
我有这个 switch 语句,每次将 double itemCost(最初为 0.80)减少 0.20。当它达到 0.00 我想执行一些代码。它可以正常工作,直到达到 0.00,但 itemCost 不是 0.00,而是变为 5.55111512312578E-17。
当我按下执行 switch 语句的按钮时 itemCost 的输出值为:
0.60, 0.40, 0.20, 5.55111512312578E-17, -0.20, -0.40 etc
代码:
switch (codeString)
{
case "20":
{
userAmount = userAmount + 0.20;
itemCost = itemCost - 0.20;
Console.WriteLine("" + itemCost);
if (itemCost == 0.00)
{
giveChange();
labelInstructions.Text = "giveChange";
}
else
{
string tempString = string.Format("{0:N2}", itemCost);
labelInstructions.Text = "Please insert £" + tempString;
}
break;
}
}
有谁知道为什么会出现这种奇怪的行为以及如何解决它?
【问题讨论】:
-
你能在你忽略的循环中添加吗?这个开关只会运行一次。代码没有显示 itemCost 的原始值。
-
您确定该值不是 5.557393938E-7 或末尾带有 E 的东西吗?
-
十进制是适合货币的 .NET 类型。
-
请在提问前搜索 SO。在关于 SO 的大约 450 万个问题中,可能有 10% 的问题涉及浮点数的不准确性 :-)
标签: c# .net-4.0 double switch-statement