簡體   English   中英

c#如何String.Format十進制無限小數位?

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

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