我如何基于欧元(€)等**货币符号**将123456789转换为1.234.567,89?

时间:2018-11-02 13:44:12

标签: c# asp.net .net asp.net-mvc xamarin

如何基于货币符号(例如欧元(€)等)将123456789转换为1.234.567,89? 我有123456789,我想要€1.234.567,89

我尝试使用CurrentCulture,但无法解决

3 个答案:

答案 0 :(得分:3)

使用.ToString("C")。像这样:

var cost = 123456789;
Console.WriteLine(cost.ToString("C"));

使用当前正在运行的系统的区域性。因此,如果您为欧元设置了区域设置,它将显示为欧元。

要强制其使用特定的文化,您可以使用此语言(此示例使用的是法国,因此显示的是欧元):

cost.ToString("C", CultureInfo.CreateSpecificCulture("fr-FR"))

更多信息在这里,包括如何更改默认区域性(而不是每次都指定):https://docs.microsoft.com/en-us/globalization/locale/currency-formatting-in-the-dotnet-framework

答案 1 :(得分:0)

您的问题不清楚。

Gabriel Luci的答案假设您(或创建后端DB的任何人)都试图通过将Currency值存储为整数来解决Floating Point imprecision的问题。这是一种非常可靠且受时间尊重的方法。出于法律原因,甚至可能需要存储4位精度(即使您仅出于正常使用目的只显示两位数字,会计也可能需要该精度级别)。

如果数据是String / NVARCHAR,则在Garbiel Lucis Solution工作之前,您首先必须将其解析为整数。我建议使用BigInteger,因为它对最大可存储编号没有上限。或者,您可以通过字符串处理(添加一些逗号和小数点)来修改字符串

您在标签中也提到了asp.net。网络服务器因存在文化问题而臭名昭著。当前文化使用计算机的文化,网页正在运行。您需要的是浏览器运行所在的文化。 我不确定是否有任何简便的方法来获取浏览器的附加文化。或者,如果您能以某种方式让浏览器为您完成翻译,那么它就会使用它所运行的区域性。

答案 2 :(得分:0)

  1. 首先,问题不清楚输入是整数,字符串还是其他
  2. 您的问题是“如何将C#字符串/整数格式化为N个小数的给定货币字符串”

让我们假设您有字符串(“最糟糕”的情况)

  1. 您可以先将字符串转换为整数,以轻松设置小数点
  2. 手动添加小数点(在这种情况下为“ 100.0”除)
  3. 使用您的数字和小数位格式化双精度值
    • 为此,我在欧洲文化中使用了“ CultureInfo.CreateSpecificCulture”

示例代码:

string  rawString = "123456789";
// 1. Raw string to raw value (integer) conversion
int    rawInt         = Int32.Parse(rawString);
// 2. Integer to expected double value (given we know we need 2 decimals)
double currencyDouble = rawInt /100.0;
// 3. Expected double value to formated string
string currencyString = currencyDouble.ToString("C", CultureInfo.CreateSpecificCulture("es"));
Console.WriteLine(currencyString);
// Outputs: 1.234.567,89 €

这将是通用方法:

static string IntStringToCurrencyStringWithDecimals(string rawString,  string locale, int decimals) {
    int    rawInt         = Int32.Parse(rawString);
    double currencyDouble = rawInt /Math.Pow(10.0, decimals);
    return currencyDouble.ToString("C", CultureInfo.CreateSpecificCulture(locale));
}

通用方法产生:

Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 0));
// Outputs: 123.456.789,00 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 2));
// Outputs: 1.234.567,89 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 4));
// Outputs: 12.345,68 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 6));
// Outputs: 123,46 €

Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "fr", 2));
// Outputs: 1 234 567,89 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "de", 2));
// Outputs: 1.234.567,89 €