在C#中舍入到超过15个小数位

时间:2015-11-14 23:30:58

标签: c# math rounding

我在C#中使用Math.Round(decimal d, int decimals)将小数舍入到指定的小数位数。我可以将舍入到 15个小数位,但是当我尝试舍入到16时,例如,我得到以下异常:

mscorlib.dll中发生未处理的“System.ArgumentOutOfRangeException”类型异常 附加信息:舍入数字必须介于0和15之间(包括0和15)。

有没有办法四舍五入到更高的小数位数,可能没有使用Math.Round

为了给问题提供更多背景知识,我正在计算非理性数学常数,例如'pi'和'e',并让用户指定要计算的小数位数。检查值和先前值是否与给定精度相同的布尔值如下:

Math.Round(valuePrevious, decPlaces) == Math.Round(valueCurrent, decPlaces)

2 个答案:

答案 0 :(得分:6)

您没有使用Math.Round(decimal d, int decimals),而是使用Math.Round(double d, int decimals)。确保valuePreviousdecimal,而不是double

Doubles最多可以舍入到15位数。 Decimals到28位数。这是这些类型支持的最高精度。

答案 1 :(得分:0)

您可能希望使用Decimal.Round()代替Math.Round()

Decimal.Round最多支持28个小数位

https://msdn.microsoft.com/en-us/library/6be1edhb(v=vs.110).aspx