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
非常 不同的数字
这是我正在尝试做的事情:
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