我有一个控制台应用程序,其中包含以下内容:
var value = 999999;
System.Console.WriteLine("Price {0:c}", value);
// Prints: Price ? 999.999,00
// Expecting: Price € 999.999,00
以下行打印价格$ 999.999,00
System.Console.WriteLine("Price {0}", value.ToString("c", new CultureInfo("en-US")));
但这一行:
System.Console.WriteLine("Price {0}", value.ToString("c", new CultureInfo("fr-BE")));
打印?而不是€
代码出了什么问题?
答案 0 :(得分:2)
假设您的默认文化应该打印欧元,代码中没有任何错误。但是,您似乎直接或通过VS启动在控制台窗口中运行该程序。使用的默认代码页是437,无法显示欧元符号。你必须把它改成一个可以,例如1252。
C:\>chcp
Active code page: 437
C:\>chcp 1252
Active code page: 1252
C:\>\Full\Path\To\Your\Program.Exe
€ 9.999,00
现在,如果您运行程序,您应该看到不同的东西。如果您使用的是默认字体(光栅字体),它仍然无法正确显示欧元符号。将其更改为Lucida控制台,程序应按预期工作。
如果要从程序中控制此项,请添加适当的编码
//Console.OutputEncoding = Encoding.Default;
//Console.OutputEncoding = Encoding.UTF8;
答案 1 :(得分:0)
使用decimal代替int。
public class TestDecimalFormat
{
static void Main ()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
答案 2 :(得分:0)
首先,
var int value = 999999;
不对。
它可以是
var value = 999999;
or
int value = 999999;
其次, 是否打印€或$或其他货币符号将取决于您当前的文化。
e.g。
using System;
public class Program
{
public static void Main()
{
var value = 999999;
System.Console.WriteLine("Price {0:c}", value);
}
}
给我输出
Price $999,999.00
要指定货币符号,我们还可以执行以下操作
var numberFormatInfo = CultureInfo.CurrentCulture.NumberFormat;
numberFormatInfo = (NumberFormatInfo) numberFormatInfo.Clone();
numberFormatInfo.CurrencySymbol = "€";
Console.WriteLine(string.Format(numberFormatInfo, "{0:c}", value));
答案 3 :(得分:0)
根据此answer,您可以按如下方式修改代码:
Console.WriteLine("Price: " + value.ToString("C", CultureInfo.CreateSpecificCulture("en-US")));
相应地添加您的CultureInfo。