双减双给出精度问题
我在.NET中遇到了一个精度问题,我认为这只适用于浮点数,但现在我看到double是浮点数。
double test = 278.97 - 90.46; Debug.WriteLine(test) //188.51000000000005 //correct answer is 188.51
处理这个问题的正确方法是什么? 回合? 丢掉不需要的小数位?
使用十进制数据类型。 “十进制值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算。”
这种情况发生在许多语言中,并且源于我们通常无法在数字硬件中精确存储双精度或浮点数这一事实。 有关如何经常存储双精度,浮点数和所有其他浮点值的详细说明,请查看维基百科上描述的各种IEEE规范。 例如: http : //en.wikipedia.org/wiki/Double_precision
当然还有其他格式,例如定点格式。 但是这种不精确性在大多数语言中,以及为什么在条件句中使用双精度时经常需要使用epsilon测试而不是相等测试(即abs(x-y)<= 0.0001而不是x == y)。
你如何处理这种不精确取决于你,取决于你的应用程序。
- Devexpress xaf ungroupinheritance类的布局。 (programmaticaly)
- C#String.IsNullOrEmpty:好还是坏?
- LINQ – GroupBy键,然后将每个分组项目放入单独的“桶”中
- WPF获取menuItem的父级
- 如何指定clickOnce应用程序的目标文件夹?
- 从RichTextBox复制所选文本
- Entity Framework的SQL运算符函数是否可以安全地防止SQL注入?
- 是否可以使用ParameterExpression?
- 我成功地从C#调用了advapi32的LsaEnumerateAccountRights()。 现在我如何解组它返回的LSA_UNICODE_STRING数组呢?