.NET 中的货币格式在金额和货币之间提供了空格
本文关键字:货币 之间 空格 金额 格式 NET | 更新日期: 2023-09-27 18:30:53
我在 C# 中遇到货币格式问题。我正在使用框架 2.0。
当我使用此代码时:
CultureInfo culture = new CultureInfo("fr-FR", false);
NumberFormatInfo numberFormatInfo = (NumberFormatInfo)culture.NumberFormat.Clone();
numberFormatInfo.CurrencySymbol = "CHF";
price.Value.ToString("C", numberFormatInfo)
似乎给了我一个字符串,金额和货币之间有一个空格。太可怕了!我绝对需要一个不间断的空间!这是怎么回事?我缺少的是格式属性还是 C# 标准?
感谢您的帮助!
所以基本上你想要价格。Value.ToString("C", numberFormatInfo).Replace(' ', '''u00A0');?至少这应该是不间断空格的代码。– 科拉克
与上面的注释完全相同,但改用 asci 值;>价格。Value.ToString("C", numberFormatInfo).替换(字符) 32, (字符) 160);(160 更容易记住>,至少对我来说是这样:))——弗林德伯格
根据我对问题的解释添加一个答案,@Corak似乎分享了这一点。
// Convert "breaking" spaces into "non-breaking" spaces (ie the html )
price.Value.ToString("C", numberFormatInfo).Replace((char) 32, (char) 160);
对 unicode 做同样的事情(由 @Corak 的链接提供):
// Convert "breaking" spaces into "non-breaking" spaces without int cast to char
price.Value.ToString("C", numberFormatInfo).Replace(' ', ''u00A0');
顺便说一句(罗斯林代表):
> ''u00A0' == (char) 160
true
如果您要经常使用它,还可以获取扩展方法:
public static class StringExtensions
{// CurrencyType is your currency type, guessing double or decimal?
public static string ToCurrencyString(this CurrencyType value, IFormatInfo format)
{
return value.ToString("C", format).Replace((char) 32, (char) 160);
}
}
使用:
numberFormatInfo.CurrencyPositivePattern = 1;
对于值1
格式是n$
其中$
是货币符号,在您的情况下是CHF
格式设置 - MSDN
CurrencyNegativePattern 或 CurrencyPositivePattern 属性,它们 返回一个整数,该整数确定以下内容:
- 货币符号的位置。
负- 值是由前导负号、尾随负号还是括号表示。
- 数值和货币符号之间是否显示空格。
请尝试以下代码:
CultureInfo culture = new CultureInfo("fr-FR", false);
NumberFormatInfo numberFormatInfo = (NumberFormatInfo)culture.NumberFormat.Clone();
numberFormatInfo.CurrencySymbol = "CHF";
numberFormatInfo.CurrencyPositivePattern = 1;
decimal d = 123.23M;
var temp = d.ToString("C", numberFormatInfo);
输出:
123,23CHF
你可以替换它。
price.ToString("C", numberFormatInfo).Replace(" ", "")
或者更好地将NumberFormatInfo.CurrencyPositivePattern
设置为1
numberFormatInfo.CurrencySymbol = "CHF";
numberFormatInfo.CurrencyPositivePattern = 1;
完整示例;
CultureInfo culture = new CultureInfo("fr-FR", false);
NumberFormatInfo numberFormatInfo = (NumberFormatInfo)culture.NumberFormat.Clone();
numberFormatInfo.CurrencySymbol = "CHF";
numberFormatInfo.CurrencyPositivePattern = 1;
Console.WriteLine((1.5M).ToString("C", numberFormatInfo));
输出将是;
1,50CHF
这是一个演示。
从Formatting Types
CurrencyNegativePattern 或 CurrencyPositivePattern 属性,它们 返回一个整数,该整数确定以下内容:
- 负
货币符号的位置。
值是由前导负号、尾随负号还是括号表示。
数值和货币符号之间是否显示空格。
您可以配置 CurrencyPositivePattern 并将其设置为适当的值。
// whatever code you had
NumberFormatInfo numberFormatInfo = (NumberFormatInfo)culture.NumberFormat.Clone();
numberFormatInfo.CurrencyPositivePattern = 1; // will format like 25.00CHF
似乎默认情况下,当涉及到$ 以外的其他货币时,它包含空格
double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3",
CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
// $12,345.68
// $12,345.679
// kr 12.345,679
如果要替换空间,可以像索纳说的那样,
numberString.ToString("C", numberFormatInfo).Replace(" ", "");
在您的global.asax ou中,全局可以改变文化并选择像这样删除空格:
CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture("fr-FR"); //Get you own culture
cultureInfo.NumberFormat.CurrencyPositivePattern = 1; //To remove the space
Thread.CurrentThread.CurrentUICulture = cultureInfo; //Apply globaly to your application
Thread.CurrentThread.CurrentCulture = cultureInfo; //Apply globaly to your application
干净的解决方案是将您的CurrencyPositivePattern
设置为 0
。例:
CultureInfo _culture= (CultureInfo) culture.Clone();
_culture.NumberFormat.CurrencyPositivePattern = 0;
var stringFormat = number.ToString("c3", _culture);
输入:1234567.845
输出:$1.234.568
输出:€1.234.568
输出:S/1.234.568