模数运算符中的C#Bug%

前端之家收集整理的这篇文章主要介绍了模数运算符中的C#Bug%前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
解决了一个错误,我找到了一些有趣的发现.

这个程序的结果

static void Main(string[] args)
    {
        int i4 = 4;
        Console.WriteLine("int i4 = 4;");
        Console.WriteLine("i4 % 1 = {0}",i4 % 1);

        double d4 = 4.0;
        Console.WriteLine("double d4 = 4.0;");
        Console.WriteLine("d4 % 1 = {0}",d4 % 1);
        Console.WriteLine("-----------------------------------------------------------");
        int i64 = 64;
        double dCubeRootOf64 = Math.Pow(i64,1.0 / 3.0);
        Console.WriteLine("int i64 = 64;");
        Console.WriteLine("double dCubeRootOf64 = Math.Pow(i64,1.0 / 3.0) = {0}",dCubeRootOf64);
        Console.WriteLine("dCubeRootOf64 = {0}",dCubeRootOf64);
        Console.WriteLine("dCubeRootOf64 % 1 = {0} ??????????????  Why 1. ??????????",dCubeRootOf64 % 1);

        Console.ReadLine();
    }

int i4 = 4;
i4 % 1 = 0
double d4 = 4.0;
d4 % 1 = 0
-----------------------------------------------------------
int i64 = 64;
double dCubeRootOf64 = Math.Pow(i64,1.0 / 3.0) = 4
dCubeRootOf64 = 4
dCubeRootOf64 % 1 = 1 ??????????????  Why 1. ??????????

int 4%1 = 0 – 正确

双4.0%1 = 0 – 正确

但是错误在于:

Math.Pow(64,1.0 / 3.0)%1 = 1

来自64的立方根是4.为什么在这种情况下4%1 = 1?

解决方法

Math.Pow(64,1.0 / 3.0)返回3.9999999999999996.
显示时,它会四舍五入为4.

取模1会返回0.99999999999999956,显示时同样舍入为1.

您可以通过添加.ToString(“R”)来查看真实值

猜你在找的C&C++相关文章