C# 双变量计算

C# 双变量计算,c#,math,double,calculation,C#,Math,Double,Calculation,这是我问题的最简单形式,我想知道这是怎么发生的 Console.WriteLine(3.12 * 3.14); 它是如何给出这个结果的 9.796800000000001 这使我对我的通用代码和程序产生了问题。如何避免这种情况并给出准确的期望输出?您可以使用float var x = (float)3.12; // or var x = 3.12f var y = (float)3.14; var result = x * y;

这是我问题的最简单形式,我想知道这是怎么发生的

Console.WriteLine(3.12 * 3.14);
它是如何给出这个结果的

9.796800000000001

这使我对我的通用代码和程序产生了问题。如何避免这种情况并给出准确的期望输出?

您可以使用
float

        var x = (float)3.12;
        // or var x = 3.12f
        var y = (float)3.14;
        var result = x * y;
        Console.WriteLine(result);

谢谢,我想知道为什么我不知道这一点:(如果我的问题这么业余,很抱歉。但是我在链接中找不到如何避免这个问题的答案。谢谢你的答案。为什么(双精度)不起作用。还有一个业余问题,为什么
float pi=3.14;
出错,需要
(float)3.14
?这是关于硬件(CPU)的问题计算64位浮点。编译器为
3.14
分配64位内存,
float
为32位。
(float)
将64位变量(
double
)强制转换为32位变量(
float
).
3.14f
直接创建32位。当然,你也可以使用
十进制。舍入错误发生在64位,而不是32位和128位。
decimal
提供了更高的灵敏度,但需要更多的CPU周期。是的,我发现这对任何和我有同样问题的人都很有用:我看到
float
可能在roundi中产生问题我也是。谢谢你的回答。