【问题标题】:Issue with .equals while comparing double in c# [duplicate]在 C# 中比较双精度时出现 .equals 的问题 [重复]
【发布时间】:2014-06-10 18:52:11
【问题描述】:

我有一个浮点值,后来我将其解析为双精度值,然后四舍五入为 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 ..为什么..请帮助我.,

【问题讨论】:

    标签: c# double


    【解决方案1】:

    应谨慎使用 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.");
    

    【讨论】:

    • 将双精度解析成十进制可以完成任务
    • @user3725571 - 你为什么不试试你的编译器? ;)
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2014-01-08
    • 2016-12-19
    相关资源
    最近更新 更多