繁体   English   中英

C#货币格式不起作用

[英]C# currency format not working

我有一个控制台应用程序,具有以下内容:

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

打印 代替

代码有什么问题?

假设您的默认区域性应该打印欧元,那么代码中没有任何错误。 但是,您似乎是直接在控制台窗口中还是通过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,该程序将按预期工作。

命令提示符菜单命令提示符属性

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

//Console.OutputEncoding = Encoding.Default;
//Console.OutputEncoding = Encoding.UTF8;

使用小数而不是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);
    }
}

首先, var int value = 999999; 不对

可以是

var value = 999999;
or 
int value = 999999;

其次,是否打印€或$或其他货币符号将取决于您当前的文化。

例如

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

根据此答案,您可以按以下方式修改代码:

Console.WriteLine("Price: " + value.ToString("C", CultureInfo.CreateSpecificCulture("en-US")));

相应地添加您的CultureInfo。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM