Math-pow结果不正确

时间:2011-03-08 21:18:10

标签: c# math floating-point

            double a1;
        a1 = Math.Pow(somehighnumber, 40);
        something.Text = Convert.ToString(xyz);

我得到的结果是E + 41等。 它像1,125123E + 41等我不明白为什么。

3 个答案:

答案 0 :(得分:11)

你的问题很不清楚;在将来,如果您使用实际编译并演示您实际遇到的问题的代码示例发布一个明确的问题,您可能会获得更好的结果。 不要让人们猜到问题所在。

如果你想要做的是显示双精度浮点数而没有科学记数法,那么使用标准数字格式说明符

Console.WriteLine(string.Format("{0:N}", Math.Pow(10, 100)));

结果:

10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.00

如果你遇到的问题是结果四舍五入,那么不要使用双精度浮点数;它们精确到小数点后15位。尝试在具有任意整数精度的BigIntegers中进行算术运算。

答案 1 :(得分:7)

那是scientific notation。这意味着1.125123 * 10 41 。如果您的数字变得如此之大以至于完全显示它需要大量的屏幕空间,则科学记数法很有用。此外,浮点运算并不精确,所以即使你确实显示了数字,大多数数字也是不正确的。

如果您需要精确计算,则应使用BigInteger而不是double(此类型在.NET 4.0或更高版本中出现)。

答案 2 :(得分:0)

double bigNum = Math.Pow(100, 100);
string bigString = string.Format("{0:F}", bigNum);

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#FFormatString

或者您可以使用4.0 indroduced BigInteger(在项目中添加对System.Numerics的引用):

Numerics.BigInteger bigInt = Numerics.BigInteger.Pow(1000, 1000);
string veryBigString =  bigInt.ToString("F");

正如您所看到的,它也适用于ToString