我试着写一些快速代码来计算数字10的不同数量级。应该很简单,但结果有点奇怪。当计算10 ^ -6的东西时,会添加许多额外的小数。结果看起来有点像这样:
以下是我使用的代码:
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;
}
答案 0 :(得分:3)
Float和Doubles由于它们的存储方式而带有舍入误差。您应该使用小数来保持精确的精确度。
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;
}