当前位置: 首页 > 编程语言 > C#

C#双加-奇怪行为分享

时间:2023-04-10 12:19:08 C#

C#双加-奇怪行为publicstaticvoidMain(){Dictionaryvalues=newDictionary();值.Add("a",0.002);值.Add("b",0.003);值.Add("c",0.012);//迭代求和。双v1=615.0;foreach(KeyValuePairkpinvalues){v1+=kp.Value;}安慰。写行(v1);//使用Sum方法求和。双v2=615.0;v2+=values.Values.Sum();控制台.WriteLine(v2);控制台.ReadLine();当我在调试器v1中查看时,它给出的值为615.01699999999994,但对于v2,它给出的值为615.017。由于某种原因,Sum方法会产生准确的结果,而迭代求和则不会。(当我打印这两个值时,它们是相同的,但我认为这是由于WriteLine方法进行了一些舍入。)有谁知道这里发生了什么?浮点数学本身并不是100%准确的,并且存在错误。不同数字相加的顺序会影响浮点错误的数量。如果这些计算完全准确很重要,那么您应该使用decimal,而不是double。这与使用Sum还是手动对数据求和无关。第一次将每个数字相加到615,第二次将所有数字相加,然后将它们相加到615。这是将相同数据相加的不同顺序。根据您使用的数字,这两种方法都可能导致或多或少的错误。double/float的问题在于它们是二进制数,在内部也称为1000110.10101001,因此仅代表该值的近似表示。阅读JonSkeet的解释:Differencebetweendecimal,floatanddoublein.NET?以上就是C#学习教程:C#双加-怪行为分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: