Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#数学。圆很长的双-不工作_C#_Double_Long Integer - Fatal编程技术网

C#数学。圆很长的双-不工作

C#数学。圆很长的双-不工作,c#,double,long-integer,C#,Double,Long Integer,以下是我想做的: double result = Math.Pow((1 + 8), 60) - 1; 结果变量为: 1.7970102999144311E+57double 并试图: Math.Round(result, 5); 返回相同的值:1.7970102999144311E+57double 例如,我想把它四舍五入到1.79701 有什么解决办法吗?你的问题是数学。四舍五入在小数点的右边。例如,如果您处理的是货币交易,并且您执行的操作留下了$1.5234524,您将使用: Math

以下是我想做的:

double result = Math.Pow((1 + 8), 60) - 1;
结果变量为: 1.7970102999144311E+57double

并试图:

Math.Round(result, 5);
返回相同的值:1.7970102999144311E+57double 例如,我想把它四舍五入到1.79701


有什么解决办法吗?

你的问题是数学。四舍五入在小数点的右边。例如,如果您处理的是货币交易,并且您执行的操作留下了$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位将正确返回相同的值

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

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

返回
1.79701E+57
。请注意,这是一个与将数字四舍五入为整数非常不同的数字。您想要的是有效数字,而不是舍入。@WaiHaLee
Math.Round
如果使用重载
Math.Round(value)
而不传递数字,则仅舍入为整数。否则,它肯定不会四舍五入到整数,而是四舍五入到指定的位数。结果仍然是:1.79701E+57!?你知道我如何摆脱这种无用的(在我的例子中)科学记数法吗?
strings=string.Format({0:E5}),result.Substring(0,7)有点“肮脏”的解决方案,但仍然有效,谢谢@Clay Ver ValenOh,我完全同意,但考虑到你试图得到的数字与数学答案完全不同,我认为“肮脏”是摆在桌面上的。:-)@你确定科学符号在你的情况下是无用的吗?你真的想把1797010299914431055401678994746813871720701766767798009856作为输出吗?我想我对这个科学符号不是很熟悉,在我看来它是一个十进制数字,但当我再次看到这个数字时,你似乎是对的。现在我很清楚了,我知道接下来该怎么处理这些数字了,谢谢。