c#中的双转换值错误

时间:2010-01-29 12:31:07

标签: c# double

double deg=90;
double two= 2* System.Math.PI;
double rad=(two)*(deg/360);

手动计算时的原始值,rad为1.5707963267948966但是调试时的rad显示为1.5707963705062866这是什么原因以及如何修复它。但是正确答案只是手动计算答案......

以下是便于比较的数字:

1.5707963267948966
1.5707963705062866
         --------- <-- differences

在调试期间我把指针放在右侧,这意味着计算方面它显示正确的答案,但是当将该值存储到rad时会发生错误。

对我有帮助。我需要它。

6 个答案:

答案 0 :(得分:8)

发生舍入错误;它不是无限精度。您必须测试值是否适当关闭 - 不要只测试相等性。在一些情况下,您可能会通过以不同的顺序应用运算符来看到细微的差异,因此您不会在数量上淹没小数字。

答案 1 :(得分:2)

使用小数而不是double。这是由于浮点精度。

答案 2 :(得分:0)

您应使用decimal值,该值比double更准确。

答案 3 :(得分:0)

Double,float和decimal是您唯一的标准选项。如果它们不够精确以满足您的需求,您将需要创建自己的类型并为其提供存储这些高精度值的方法以及用于执行数学函数的自己的运算符。

你会注意到double类型精确到7个位置,十进制类型会更准确。如果你想要更高的精度,你需要提出一个算法来计算和存储它。

答案 4 :(得分:0)

使用您的代码我无法重现您所看到的内容。

我这样做了:

使用System;

namespace ConsoleApplication18
{
    class Program
    {
        static void Main(string[] args)
        {
            double deg = 90;
            double two = 2 * System.Math.PI;
            double rad = (two) * (deg / 360); 

            Console.Out.WriteLine(rad);
        }
    }
}

我得到了这个输出:

1.5707963267949

当在WriteLine行的断点上将鼠标悬停在rad变量上时,我在工具提示中看到以下值

1.5707963267948966

你在哪里/怎么看到其他价值?

上述差异可能是由于我没有在写入调用中指定精度,所以也许我也可以获得所有数字。我当然没有看到你提到的第二个值。

答案 5 :(得分:0)

相关问题