簡體   English   中英

Convert.ToString(Decimal,IFormatProvider)或String.Format

[英]Convert.ToString(Decimal, IFormatProvider) or String.Format

我已經看到了ToString(IFormatProvider)的奇數十進制類型行為問題

這是我的測試代碼

// Define an array of numbers to display.
double[] numbers = { -1.5345e16, -123.4321, 19092.123, 1.1734231911290e16 };
// Define the culture names used to display them.
string[] cultureNames = { "en-US", "fr-FR", "ja-JP", "ru-RU" };

foreach (double number in numbers)
{
    Console.WriteLine("{0}:", Convert.ToString(number,
                              System.Globalization.CultureInfo.InvariantCulture));
    foreach (string cultureName in cultureNames)
    {
        System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(cultureName);
        culture.NumberFormat.NumberGroupSizes = new int[] {2,2,3};
        culture.NumberFormat.NumberDecimalDigits = 5;
        Console.WriteLine(".ToString          {0}: {1,20}",
                          culture.Name, number.ToString("N", culture));
        Console.WriteLine("Convert.ToString   {0}: {1,20}", 
            culture.Name, Convert.ToString(number, culture));
    }
    Console.WriteLine();
}

樣本結果如下:

為什么Convert.ToString不應用格式?

在此處輸入圖片說明

這是Win7 Prof / VS2010 + SP1Rel(10.0.40219.1)

根據Convert.ToString(double, IFormatProvider)的文檔:

此實現與Double.ToString(IFormatProvider)相同

...然后記錄為:

ToString(IFormatProvider)方法以指定區域性的默認(“ G”或常規)格式格式化Double值。

調用ToString ,您傳遞的是N如果傳遞G ,則得到的結果與Convert.ToString相同。

G格式說明符文檔指出:

結果字符串受當前NumberFormatInfo對象的格式信息影響。 下表列出了控制結果字符串格式的NumberFormatInfo屬性。

...並列出NegativeSignNumberDecimalSeparatorPositiveSign 您的代碼沒有設置任何這些屬性,這就是為什么它沒有改變的原因。 如果您寫:

culture.NumberFormat.NumberDecimalSeparator = "#"

例如,那影響Convert.ToString的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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