微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

模数运算符中的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”)来查看真实值

原文地址:https://www.jb51.cc/c/119651.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐