C#Math.Round很长一倍 - 不工作

时间:2016-05-31 23:23:36

标签: c# double long-integer

这是我想要做的事情:

ORDER BY t1.id, t2.id

结果变量是:          1.7970102999144311E + 57 double

试图:

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

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

任何解决方案?

3 个答案:

答案 0 :(得分:1)

你遇到的问题是Math.Round将小数点右边的东西四舍五入。例如,如果您正在处理货币并且您执行的操作为$ 1.5234524,那么您将使用:

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

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

答案 1 :(得分:1)

你误解了你所看到的。

1.7970102999144311E+57

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

它是一个整数,因此将其舍入到5位小数将正确返回相同的值。

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

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

返回1.79701E+57。请注意,这是与1.79701

不同的非常号码

答案 2 :(得分:0)

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

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