在C#中打印增量为0.1我目前正在阅读SteveMcConnell编写的代码大全,特别是关于浮点数的第295页。当我运行以下代码时:doublenominal=1.0;双和=0.0;对于(inti=0;i<10;i++){sum+=0.1;Console.WriteLine("总和:"+sum.ToString());}if(equals(nominal,sum)){Console.WriteLine("数字相同");}else{Console.WriteLine("数字不一样");我得到0.10.20.30.40.50.60.70.80.91.0的打印数字不同为什么假设发生了什么我没有得到输出?即:0.10.20.300000000000000040.40.50.60.70.799999999999999990.8999999999999999990.99999999999999999999999999999999999999999999999999999999999我认为是这样,因为当我调试应用程序并单步执行for循环时,我可以看到不终止的重复十进制数。你怎么认为?我是对还是错?double.ToString()使用通用格式,如果未指定精度,则默认为小数点后15位。所以它做了一点舍入,这就是为什么你看到你所看到的。比如你问题中指定的0.899999999999999999就是17位小数。您实际上可以使用sum.ToString("g17")查看整数。您可以在此处找到.net的标准数字格式字符串及其默认精度:http://msdn.microsoft.com/en-us/library/dwhawy9k(VS.80).aspx这是ToString的默认行为。如果你在调试器中查看总和,你会得到这个,它显示未通过ToString路由的值:0.00.10.20.300000000000000040.40.50.60.70.799999999999999930.89999999999999991显示基本行为如您所料hearttoheart简短的回答是:它是浮点数,所以不要期待任何东西,但它是正确的(对于一个合适的“正确”值)!长问题是了解浮点如何工作以及人们如何使用浮点。IIRCGNUprintf(以及我认为的其他人)特例“真的非常接近一个体面的基数10”。以上是C#学习教程:c#中打印增量为0.1。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
