And*_*eas 5 c# precision decimal
每当我们需要高十进制精度时,我们使用小数来进行计算.有没有办法检查精度是否足以进行计算?
我想使以下代码抛出异常:
decimal almostMax = Decimal.MaxValue - 1;
decimal x = almostMax + 0.1m; // This should create an exception, since x equals almostMax.
Assert.AreEqual(x, almostMax); // This does NOT fail.
Run Code Online (Sandbox Code Playgroud)
它在实际代码中并不重要,但保证安全是件好事.
这个扩展方法应该有帮助。它反转操作并检查是否可以根据结果正确计算输入参数。如果情况并非如此,则该操作会导致精度损失。
public static decimal Add(this decimal a, decimal b)
{
var result = a + b;
if (result - a != b || result - b != a)
throw new InvalidOperationException("Precision loss!");
return result;
}
Run Code Online (Sandbox Code Playgroud)
工作示例: https: //dotnetfiddle.net/vx6UYY
如果您想使用诸如+etc 之类的常规运算符,则必须采用Philipp Schmid 的解决方案并在您自己的十进制类型上实现运算符。