使用货币符号格式化小数而不是尾随零?

时间:2014-07-01 12:27:30

标签: c# asp.net .net cultureinfo asp.net-4.5

目前的文化是“fr-FR”(已在应用程序中设置)

decimal amount = 20m;

var formattedCurrency = string.Format(Thread.CurrentThread.CurrentCulture, "{0:C}", amount);

它给了我20,00 €

如何删除尾随零?

  1. 注意:如果金额为20.01,则输出应为20,01€
  2. 如果金额是20.00,则输出应为20€
  3. 编辑:

    我尝试使用G29删除尾随零,但丢失了货币符号。 :(

3 个答案:

答案 0 :(得分:1)

double dec = 20.01;

string amount = string.Format("{0:#.##}", dec);
switch (CultureInfo.CurrentCulture.NumberFormat.CurrencyPositivePattern)
   {
         case 0:
            amount = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol + amount;
                    break;
         case 1:
            amount = amount + CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol;
                    break;
         case 2:
            amount =  CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol + " " + amount;
                    break;
         case 3:
            amount = amount + " " + CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol;
                    break;
}

在Davio发表评论后更新

问候。

答案 1 :(得分:1)

试试这个https://dotnetfiddle.net/F3cJmu

using System;
using System.Globalization;

public class Program
{
public static void Main()
{
    double amount = 39.5555;

    string decimalPoint = (amount).ToString();

    decimalPoint = decimalPoint.Substring(decimalPoint.IndexOf(".") + 1);

    if( decimalPoint.Length > 0)
        Console.WriteLine(string.Format(new CultureInfo("en-US"),"{0:C" + decimalPoint.Length +"}", amount));
    else
        Console.WriteLine(string.Format(new CultureInfo("en-US"),"{0:C}", amount));

}
}

答案 2 :(得分:1)

这将有效:

string.Format(Thread.CurrentThread.CurrentCulture, "{0:#.##}", amount) + " " + Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol

如果你需要知道货币符号应该出现在哪里,它会变得有点复杂,但这可能就足够了(取决于你的情况)。

问题是,你不能为货币格式指定条件数字,并且有充分的理由你不应该这样做!

事情是:2020.00上丢失有效数字,因此客户不知道它是20.01向下舍入还是20.00向下舍入。我会使用{0:C},除非我有充分的理由不这样做。