我有一个浮点值,我将其解析为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 ..为什么......请帮助我。
答案 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.");