【发布时间】:2021-02-12 10:34:00
【问题描述】:
在执行计算和比较结果时,变量的精度存在问题。我在 C# 中工作。这是一个例子。
double ImporteDebe;
ImporteDebe = 0;
double base1;
base1 = Convert.ToDouble("10,22");
double PorcentajeIva1;
PorcentajeIva1 = Convert.ToDouble("0,21");
double Iva1;
Iva1 = Convert.ToDouble((base1 * PorcentajeIva1).ToString("N2")); //2,1462 -> 2,15
ImporteDebe = ImporteDebe + base1; // 10,22
ImporteDebe = ImporteDebe + Iva1;// 10,22 + 2,15 = 12,37000000001
if (ImporteDebe == (base1 + Iva1))
{
System.Diagnostics.Debug.Print(Convert.ToString(ImporteDebe));//condition is never met
}
如果您运行代码,您会发现条件“ImporteDebe == (base1 + Iva1)”从未满足
这个问题有简单的解决方案吗?
【问题讨论】:
-
对我来说很好;你确定吗?
-
如果没有特别要求双精度,请尝试使用十进制。
-
我正在使用 Visual Studio 17 和 C#。它对我不起作用。条件“ImporteDebe==base1+Iva1”永远不会满足。
-
使用十进制变量可以正常工作。使用与可执行文件相关的十进制而不是双精度?执行的规模或速度?