右对齐货币字符串格式

时间:2011-09-14 20:32:10

标签: c# .net string-formatting

我正在尝试将某种货币与右边对齐:

double number1 = 150.45;
double number2 = 1400.95;

//Output  kr. 150,45
Console.WriteLine("{0:c2}", number1);

//Output  kr. 1.400,95
Console.WriteLine("{0:c2}", number2);

但我希望我的输出看起来像这样。

//Output kr.   150.45

//Output kr. 1.400,95

哪个数字与右边对齐?

4 个答案:

答案 0 :(得分:6)

系统很难说出你的号码有多少个位置。所以你必须自己决定。如果您已经决定使用String.PadLeft

之类的内容

例如

Console.WriteLine("kr. {0}", number1.ToString("#,##0.00").PadLeft(10,' '));

答案 1 :(得分:4)

 string sym = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol;
 Console.WriteLine("{0}{1,10:#,##0.00}",sym, number1);
 Console.WriteLine("{0}{1,10:#,##0.00}",sym, number2);

ideone output

答案 2 :(得分:2)

这适用于任何文化:

int width = 20;

string result = 1400.95.ToString("C");

NumberFormatInfo nfi = Thread.CurrentThread.CurrentCulture.NumberFormat;
if (nfi.CurrencyPositivePattern % 2 == 0)
{
    result = nfi.CurrencySymbol +
             result.Substring(nfi.CurrencySymbol.Length).PadLeft(width);
}
else
{
    result = result.PadLeft(width + nfi.CurrencySymbol.Length);
}

// result == "$            1,400.95" (en-US)
//           "£            1,400.95" (en-GB)
//           "           1.400,95 €" (de-DE)
//          "           1.400,95 kr" (sv-SE)
//         "              1.401 kr." (is-IS)
//          "kr            1 400,95" (nb-NO)
//         "kr.            1.400,95" (da-DK) (!)

答案 3 :(得分:2)

当然这不如接受的答案那么好,但我对右对齐有同样的问题,我的直接反应是:

//Output  kr. 150,45
Console.WriteLine("{0,10}",string.Format("{0:c2}",number1));