C# Math.Round 很长的双 - 不工作

C# Math.Round very long double - not working

这是我正在尝试做的事情:

double result = Math.Pow((1 + 8), 60) - 1;

结果变量是: 1.7970102999144311E+57

并尝试:

Math.Round(result, 5);

Returns 相同:1.7970102999144311E+57 双 例如,我想将其四舍五入为 1.79701

有什么解决办法吗?

您遇到的问题是 Math.Round 将内容四舍五入到小数点右侧。例如,如果您正在处理货币并且您执行的操作使您得到 1.5234524 美元,您将使用:

Math.Round(1.5234524,2);
// output 1.52

您正在处理的数字实际上是一个非常大的数字的科学记数法,小数点右边没有任何内容。这就是为什么 Math.Round 的结果与输入相同的原因。

前面的评论和回答是正确的。但要获得您想要实现的目标,您可以使用以下内容:

double result = Math.Pow((1 + 8), 60) - 1;
string s = String.Format("{0:E5}", result);
double d = Double.Parse(s);

您误解了所见。

1.7970102999144311E+57

的科学计数法
1797010299914431100000... (with 41 trailing zeros).

它是一个整数,因此四舍五入到小数点后 5 位将正确 return 相同的值。

你要做的是格式化数字的输出

String.Format(CultureInfo.InvariantCulture, "{0:0.#####E+0}", result);

return 1.79701E+57。请注意,这是一个 1.79701

非常 不同的数字