在 C# 中四舍五入到小数点后 15 位以上
Rounding to more than 15 decimal places in C#
我在 C# 中使用 Math.Round(decimal d, int decimals)
将小数舍入到指定的小数位数。我可以将 舍入到 15 位小数,但是当我尝试舍入到 16 位时,例如,我得到以下异常:
'System.ArgumentOutOfRangeException' 类型的未处理异常发生在 mscorlib.dll
附加信息:四舍五入的数字必须介于 0 和 15 之间(含)。
有没有办法四舍五入到更高的小数位数,也许不使用 Math.Round
?
为了稍微说明问题的背景,我正在计算 'pi' 和 'e' 等无理数数学常数,并让用户指定要计算的小数位数。检查值和前一个值是否与给定精度相同的布尔值如下:
Math.Round(valuePrevious, decPlaces) == Math.Round(valueCurrent, decPlaces)
您可能想使用 Decimal.Round()
而不是 Math.Round()
Decimal.Round最多支持28位小数
https://msdn.microsoft.com/en-us/library/6be1edhb(v=vs.110).aspx
您没有使用 Math.Round(decimal d, int decimals)
,您使用的是 Math.Round(double d, int decimals)
。确保 valuePrevious
是 decimal
,而不是 double
。
Doubles can be rounded to 15 digits max. Decimals 到 28 位。这是这些类型支持的最大精度。
我在 C# 中使用 Math.Round(decimal d, int decimals)
将小数舍入到指定的小数位数。我可以将 舍入到 15 位小数,但是当我尝试舍入到 16 位时,例如,我得到以下异常:
'System.ArgumentOutOfRangeException' 类型的未处理异常发生在 mscorlib.dll 附加信息:四舍五入的数字必须介于 0 和 15 之间(含)。
有没有办法四舍五入到更高的小数位数,也许不使用 Math.Round
?
为了稍微说明问题的背景,我正在计算 'pi' 和 'e' 等无理数数学常数,并让用户指定要计算的小数位数。检查值和前一个值是否与给定精度相同的布尔值如下:
Math.Round(valuePrevious, decPlaces) == Math.Round(valueCurrent, decPlaces)
您可能想使用 Decimal.Round()
而不是 Math.Round()
Decimal.Round最多支持28位小数
https://msdn.microsoft.com/en-us/library/6be1edhb(v=vs.110).aspx
您没有使用 Math.Round(decimal d, int decimals)
,您使用的是 Math.Round(double d, int decimals)
。确保 valuePrevious
是 decimal
,而不是 double
。
Doubles can be rounded to 15 digits max. Decimals 到 28 位。这是这些类型支持的最大精度。