开发者

Math-pow incorrect results

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

the result i get is have E+41 etc. i开发者_开发问答ts like 1,125123E+41 etc. i dont get why.


Your question is very unclear; in the future, you'll probably get better results if you post a clear question with a code sample that actually compiles and demonstrates the problem you're actually having. Don't make people guess what the problem is.

If what you want to do is display a double-precision floating point number without the scientific notation then use the standard number formatting specifier:

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

Results in:

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

If what you have a problem with is that the result is rounded off, then don't use double-precision floats; they are accurate to only 15 decimal places. Try doing your arithmetic in BigIntegers, which have arbitrary integer precision.


That's scientific notation. It means 1.125123 * 1041. Scientific notation is useful if your number becomes so large that displaying it in full would require a lot of screen space. Also, floating point arithmetic is not precise so even if you did display the number in full most of the digits would be incorrect anyway.

If you want precise calculations you should use BigInteger instead of double (this type is present in .NET 4.0 or newer).


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

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

Or you can use the 4.0 indroduced BigInteger(add a reference to System.Numerics to the Project):

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

As you can see it also works with ToString.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜