附加数字到 Double
Extra Digits being appended to a Double
我正在尝试编写一些快速代码来计算数字 10 的不同数量级。应该很简单,但结果有点奇怪。当计算 10^-6 的东西时,会添加很多额外的小数。结果看起来有点像这样:
- 0.1
- 0.01
- 0.001
- 0.0001
- 0.00001
- 0.0000010000000000000002
这是我使用的代码:
private Double CalculateOrderOfMagnitude(Int32 n)
{
if (n < 0)
return CalculateOrderOfMagnitude(n + 1) / 10.0;
if (n > 0)
return CalculateOrderOfMagnitude(n - 1) * 10.0;
return 1.0d;
}
浮点数和双精度数由于其存储方式而带有舍入误差。您应该使用小数来保持精确度。
http://en.wikipedia.org/wiki/Double-precision_floating-point_format
private decimal CalculateOrderOfMagnitude(int n)
{
if (n < 0)
return CalculateOrderOfMagnitude(n + 1) / 10m;
if (n > 0)
return CalculateOrderOfMagnitude(n - 1) * 10m;
return 1m;
}
我正在尝试编写一些快速代码来计算数字 10 的不同数量级。应该很简单,但结果有点奇怪。当计算 10^-6 的东西时,会添加很多额外的小数。结果看起来有点像这样:
- 0.1
- 0.01
- 0.001
- 0.0001
- 0.00001
- 0.0000010000000000000002
这是我使用的代码:
private Double CalculateOrderOfMagnitude(Int32 n)
{
if (n < 0)
return CalculateOrderOfMagnitude(n + 1) / 10.0;
if (n > 0)
return CalculateOrderOfMagnitude(n - 1) * 10.0;
return 1.0d;
}
浮点数和双精度数由于其存储方式而带有舍入误差。您应该使用小数来保持精确度。
http://en.wikipedia.org/wiki/Double-precision_floating-point_format
private decimal CalculateOrderOfMagnitude(int n)
{
if (n < 0)
return CalculateOrderOfMagnitude(n + 1) / 10m;
if (n > 0)
return CalculateOrderOfMagnitude(n - 1) * 10m;
return 1m;
}