簡體   English   中英

將數字字符串轉換為舍入小數(C#)

[英]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 位有效數字,請查看一些現有答案:

將雙倍數換算為x有效數字

舍入雙精度中的重要數字,而不是小數位

轉換崩潰了。

這是因為該值是太大的decimal decimal可以容納的7.9228E+287.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM