将数字字符串转换为四舍五入十进制(C#)

将数字字符串转换为四舍五入十进制(C#),c#,math,C#,Math,很抱歉这个愚蠢的问题,但我从数据库中得到了这个值 "7.545720553985866E+29" 我需要把这个值转换成十进制,四舍五入到6位。最好的方法是什么?我试过了 var test = double.Parse("7.545720553985866E+29"); test = Math.Round(test, 6); var test2 = Convert.ToDecimal(test); 但该值保持不变,转换崩溃。数学。舍入舍入到小数点右侧的N位。您的数字在小数点右侧没有数字(它相当

很抱歉这个愚蠢的问题,但我从数据库中得到了这个值

"7.545720553985866E+29"
我需要把这个值转换成十进制,四舍五入到6位。最好的方法是什么?我试过了

var test = double.Parse("7.545720553985866E+29");
test = Math.Round(test, 6);
var test2 = Convert.ToDecimal(test);

但该值保持不变,转换崩溃。

数学。舍入舍入到小数点右侧的N位。您的数字在小数点右侧没有数字(它相当于
75457205539858660000000000000
),因此四舍五入不会改变数值

如果要舍入到N个有效数字,请查看一些现有答案:

转换崩溃了


这是因为该值对于一个对象来说太大了。一个
decimal
所能容纳的最大值是
7.9228E+28
——您的值大约是这个值的10倍。

也许您可以将其子串,然后进行解析

var test=“7.545720553985866E+29”。子串(0,8);//7.545720

测试=数学四轮(测试,6)


var test2=转换为特定值(测试)

您可以使用此选项将有效数字四舍五入为6位:

round(test, 6 - int(math.log10(test)))
由此产生的值是

7.545721e+29
这是通过使用
math
模块中的
log10
来获得
test
中的10的幂,将其向下舍入得到一个整数,从6中减去它,然后使用
round
获得所需的数字

正如其他人所指出的,
四舍五入
可精确到给定的小数位数。
log10
和其他数字显示了获得所需有效位数所需的小数位数。如果小数位数为负数,
舍入
舍入小数点的左侧

您应该知道,
log10
并不完全准确,取其
int
可能会偏离预期值1。这种情况很少发生,但确实发生了。此外,即使计算的值是正确的,将值转换为字符串(例如打印时)也可能会得到不同于预期的结果。如果您需要完美的精度,最好使用值的字符串表示形式。

Math.Round(test,6)
将小数点后的小数点舍入到6位。但是您的数字足够大,实际上是类似于
75457205539858660000000000000.0
,所以它已经四舍五入了。