C#货币格式不起作用

时间:2014-11-11 19:51:45

标签: c# formatting

我有一个控制台应用程序,其中包含以下内容:

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")));

打印而不是

代码出了什么问题?

4 个答案:

答案 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控制台,程序应按预期工作。

Command Prompt  Menu Command Prompt Properties

如果要从程序中控制此项,请添加适当的编码

//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。