![](/img/trans.png)
[英]String.Format decimal with both thousand separators and forced decimal places
[英]c# how to String.Format decimal with unlimited decimal places?
我需要將十進制數轉換為帶有千組和無限(可變)十進制數的格式化字符串:
1234 -> "1,234" 1234.567 -> "1,234.567" 1234.1234567890123456789 -> "1,234.1234567890123456789"
我嘗試了String.Format(“{0:#,#。#}”,十進制) ,但它將任意數字修剪為最多1位小數。
您可以多次使用#(請參閱自定義數字格式字符串 ):
string.Format("{0:#,#.#############################}", decimalValue)
或者,如果您只是直接格式化數字,也可以使用帶有格式字符串的decimal.ToString 。
但是,沒有辦法包含“ 無限小數”。 如果沒有支持任意精度浮點數的庫(例如,使用來自Extreme Numerics的 BigFloat之類的東西),最終會遇到精度問題。 即使十進制類型也有其精度限制(28-29位有效數字)。 除此之外,你還會遇到其他問題。
正如我所說,十進制類型的精度為28-29位。
decimal mon = 1234.12345678901234567890123M;
var monStr = mon.ToString("#,0.##############################");
var monStr2 = String.Format("{0:#,0.##############################}", mon);
這里有小數分隔符后的30x #
:-)
我用0
更改了一個#
,因此0.15
不會寫為.15
。
這應該可以解決問題
string DecimalToDecimalsString(decimal input_num)
{
decimal d_integer = Math.Truncate(input_num); // = 1234,0000...
decimal d_decimals = input_num-d_integer; // = 0,5678...
while (Math.Truncate(d_decimals) != d_decimals)
d_decimals *= 10; //remove decimals
string s_integer = String.Format("{0:#,#}", d_integer);
string s_decimals = String.Format("{0:#}", d_decimals);
return s_integer + "." + s_decimals;
}
用其他類型替換十進制也應該有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.