使用C#Math.Abs​​返回值 - 未获得预期输出

Oli*_*ham 1 c# visual-studio-2010 absolute-value

我想找到一个数字的delta值.
我试着用这个.我用过Abs功能.它适用于整数.
但是当我尝试做以下事情时,

var gh = Math.Abs(3.223 - 6.243);  
Run Code Online (Sandbox Code Playgroud)

它返回3.0200000000000005.但我期待 3.02.
为什么?怎么弄3.02

Hon*_*tan 7

因为您使用的是float/double值,这些值本质上不是100%精确的(这是由于它们的二进制表示).例如,你甚至不能精确地0.1使用浮点数,因为它的二进制表示是周期性的1.(1001).这是一篇关于此事的非常完整的文章:每个计算机科学家应该知道的关于浮点运算的内容

Tl; dr解决方案decimal用于精确的十进制算术运算

var gh = Math.Abs(3.223m - 6.243m); 
Run Code Online (Sandbox Code Playgroud)