簡體   English   中英

字符串格式化意外結果

[英]String formating unexpected result

為什么這兩條線顯示不同的值? 是因為{0:18}”嗎?為什么?謝謝。

Console.WriteLine(value.ToString("C", CultureInfo.GetCultureInfo("da-DK")));           //-12,46 kr.
Console.WriteLine("{0,-18}",value.ToString("C"), CultureInfo.GetCultureInfo("da-DK")); //($12.46)

是因為{0:18}嗎?

不。在第一種情況下,您使用“C”格式說明符將值格式化為字符串 a,並使用丹麥文化。

在第二種情況下,您將使用默認區域性的“C”格式說明符將值格式化為字符串 a ......然后將該字符串值包含在另一個格式操作中。 您將丹麥文化作為第二個未使用的格式參數傳遞,但即使您在正確的位置傳遞它,到那時它也無關緊要,因為當您格式化string時,它總是保持原樣,不管的文化。

我懷疑你真的想要這個:

string text = value.ToString("C", CultureInfo.GetCultureInfo("da-DK"));
Console.WriteLine("{0,-18}", text);

或者在一次操作中完成所有字符串格式化:

string text = string.Format(CultureInfo.GetCultureInfo("da-DK"), "{0,-18:C}", value);
Console.WriteLine(text);

(據我所知, Console.WriteLine沒有允許指定文化的重載。)

在這些調用中,culture 參數的處理方式不同; 對於第一個片段

Console.WriteLine(value.ToString("C", CultureInfo.GetCultureInfo("da-DK")));

我們將value轉換為string ,將value視為丹麥( CultureInfo.GetCultureInfo("da-DK") )的貨幣"C" )。 相反對於

Console.WriteLine("{0,-18}",value.ToString("C"), CultureInfo.GetCultureInfo("da-DK"));

我們使用兩個參數有效地調用String.Format ( "{0,-18}" ):

  1. value.ToString("C") - 作為默認文化(不需要da-DK貨幣value ,因此可以是"15.47$"
  2. CultureInfo.GetCultureInfo("da-DK")被忽略(格式中沒有{1}

暫無
暫無

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

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