在c#中比较double时出现.equals问题

时间:2014-06-10 10:25:05

标签: c# double

我有一个浮点值,我将其解析为double,然后舍入为2.此外,我还有另一个浮点值,我与第一个浮点值完全相同。 这是示例代码..

string pulse = arrvaluedline[2].ToString();
pCost = float.Parse(arrvaluedline[3]);

double d = System.Convert.ToDouble(spCost);

double dd = Math.Round(d,2);

string[] arrpulse = pulse.Split(':');

vodanoofPulse = float.Parse(arrpulse[0]);

calculatedCost = CallCost * Pulse;

double dcalcost = Math.Round(calculatedCost, 2);

现在我正在尝试比较

 if (dcalcost.Equals(spCost)){
 }

虽然我的两个值dcalcost和spCost都是0.4。除此之外,流量不会进入if ..为什么......请帮助我。

1 个答案:

答案 0 :(得分:4)

应谨慎使用Equals方法,因为两个明显等效的值可能不相等,因为这两个值的精度不同。以下示例报告Double值.333333和由1 by 3除以返回的Double值不相等。

// Initialize two doubles with apparently identical values 
double double1 = .33333;
double double2 = 1/3;
// Compare them for equality
Console.WriteLine(double1.Equals(double2));    // displays false

比较双打并不像人们想象的那么容易。以下是MSDN关于如何以更好的方式完成此操作的示例。

// Initialize two doubles with apparently identical values 
double double1 = .333333;
double double2 = (double) 1/3;
// Define the tolerance for variation in their values 
double difference = Math.Abs(double1 * .00001);

if (Math.Abs(double1 - double2) <= difference)
   Console.WriteLine("double1 and double2 are equal.");
else
   Console.WriteLine("double1 and double2 are unequal.");