[英]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.