[英]Convert a number string to a rounded decimal (C#)
很抱歉这个愚蠢的问题,但我从数据库中找回了这个值
"7.545720553985866E+29"
我需要将此值转换为小数,舍入为6位数。 最好的方法是什么? 我试过了
var test = double.Parse("7.545720553985866E+29");
test = Math.Round(test, 6);
var test2 = Convert.ToDecimal(test);
但价值保持不变,转换崩溃。
Math.Round
到小数点右边的 N位数。 您的号码在小数点右侧没有数字(相当于754,572,055,398,586,600,000,000,000,000
),因此四舍五入不会改变该值。
如果您要舍入到N 位有效数字,请查看一些现有答案:
转换崩溃了。
这是因为该值是太大的decimal
。 decimal
可以容纳的7.9228E+28
是7.9228E+28
- 您的值大约是7.9228E+28
值的10倍。
也许你可以将其子串,然后解析。
var test =“7.545720553985866E + 29”.Substring(0,8); // 7.545720
test = Math.Round(test,6);
var test2 = Convert.ToDecimal(test);
您可以使用它来舍入到6位有效数字:
round(test, 6 - int(math.log10(test)))
从中得到的值是
7.545721e+29
这可以通过使用math
模块中的log10
来获得test
的10的幂,将其向下round
以获得整数,从6减去然后使用round
来获得所需的数字。
正如其他人所指出的, round
工作到给定的小数位数。 log10
和其余数字表示需要多少小数位才能获得所需的有效位数。 如果小数位为负数,则在小数点左侧round
入。
您应该知道log10
不是完全准确的,并且取其中的int
可能会偏离预期值1。 这很少发生,但确实发生了。 此外,即使计算值正确,将值转换为字符串(例如打印时)也可能会产生与预期不同的结果。 如果您需要完美的准确性,那么最好使用值的字符串表示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.