右对齐货币字符串格式
问题描述:
我试图对准一些货币权:右对齐货币字符串格式
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
其中数字与右边对齐?
答
string sym = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol;
Console.WriteLine("{0}{1,10:#,##0.00}",sym, number1);
Console.WriteLine("{0}{1,10:#,##0.00}",sym, number2);
答
系统很难说出你的号码有多少个地方。所以你必须自己决定。如果你已经决定,你可以使用类似String.PadLeft
例如
Console.WriteLine("kr. {0}", number1.ToString("#,##0.00").PadLeft(10,' '));
答
这应该对任何文化工作:
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) (!)
答
当然这不是与已接受的答案一样好,但我有与右对齐相同的问题我的直接反应是:
//Output kr. 150,45
Console.WriteLine("{0,10}",string.Format("{0:c2}",number1));
感谢您的信息,在我真正的项目中我使用小数。只是我为这个问题创建的一些快速代码。 – gulbaek