c# - 货币格式

标签 c# .net currency

这应该是一个简单的问题但是......

我需要在 C# 中格式化用于显示的货币(字符串)

相关货币将有自己的规则,例如要使用的符号以及该符号是应该出现在值(value)之前(例如 $10)还是之后(例如 10₫,这是越南盾)。

但是数字的格式如何取决于本地用户,而不是货币。

例如

1.234,56 ₫ should be displayed to a user in Vietnam but 
1,234.56 ₫ should be displayed to a user in the US

(格式化为代码,因此很容易看出 , 和之间的区别。)

所以代码如下

Double vietnamTotal = 1234.56;
return vietnamTotal.ToString("c");  

不会工作,因为它将使用用户(或更准确地说是 CultureInfo.CurrentCulture)语言环境来设置格式和货币,因此您会得到类似 $1,123.56 的东西 - 正确使用 , 和 。但错误的符号。

Double vietnamTotal = 1234.56;
CultureInfo ci = new CultureInfo(1066); // Vietnam
return vietnameTotal.ToString("c",ci)); 

会给出 1.234,56 ₫ - 正确的符号,错误使用 , 和 。对于当前用户。

此帖gives more detail做正确的事,而不是怎么做。

我缺少隐藏在框架中的明显方法吗?

最佳答案

  • 从用户的货币中获取NumberFormatInfo,并克隆它
  • 将克隆格式中的 CurrencySymbol 设置为相关货币的 CurrencySymbol
  • 如果您想要复制货币位置(以及格式的其他一些方面), 以同样的方式设置CurrencyPositivePatternCurrencyNegativePattern
  • 使用结果进行格式化。

例如:

using System;
using System.Globalization;

class Test
{    
    static void Main()
    {
        decimal total = 1234.56m;
        CultureInfo vietnam = new CultureInfo(1066);
        CultureInfo usa = new CultureInfo("en-US");

        NumberFormatInfo nfi = usa.NumberFormat;
        nfi = (NumberFormatInfo) nfi.Clone();
        NumberFormatInfo vnfi = vietnam.NumberFormat;
        nfi.CurrencySymbol = vnfi.CurrencySymbol;
        nfi.CurrencyNegativePattern = vnfi.CurrencyNegativePattern;
        nfi.CurrencyPositivePattern = vnfi.CurrencyPositivePattern;

        Console.WriteLine(total.ToString("c", nfi));
    }
}

不可否认,我的控制台无法显示正确的符号,但我确定这只是由于字体问题:)

关于c# - 货币格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071273/

相关文章:

java - 十进制负数和正数之和

c# - INotifyPropertyChanged 用户是否使用反射从实际属性中获取值?

c# - 如何调用具有数据绑定(bind)的通用方法?

c# - 当我用有密码的constring打开连接时,为什么Mysql不给我我的connectionstring和密码;

c# - 防止多次分配相同的事件处理程序

c# - 为什么在 ConfigureAwait(false) 之后保留文化

.net - Web 安装项目 - 获取当前机器名称

php - 使用 PHP 进行货币转换

excel - 在单元格中强制使用美国货币(或其他国家/地区)

python - 在 Python 中将金额转换为印度符号