C#decimal的格式小数分隔符

时间:2014-01-27 23:59:49

标签: formatting decimal

我正在与第三方系统交互,要求我发送十进制数字,其中小数逗号必须在小数部分之前。如果该值没有小数部分,则必须仍然存在小数点逗号。

所以例如

decimal d = 123.45M; //needs to become 123,45
decimal d2 = 345M; //needs to become 345,

为此目的,是否有一种格式化.net小数的优雅方法?

1 个答案:

答案 0 :(得分:1)

您的第三方系统似乎只是使用不同的文化。您可以设置要使用的CultureInfo,格式化将为该文化执行所需的操作,包括日期,数字和货币。

示例:

CultureInfo culture = new CultureInfo("fr-FR");
Console.WriteLine(string.Format(culture, "{0}", 123.45M));

输出:

123,45

即使您想保留当前的文化,但为了给定的目的,只需覆盖一件事,您可以通过以下方式覆盖它们:

culture.NumberFormat.NumberDecimalSeparator = ",";

编辑:我发现无法仅使用内置数字格式来执行尾随小数分隔符,但您可以找到通过custom numeric format strings查找的内容。否则,您可能不得不求助于d2 % 1 == 0并手动添加小数分隔符。

示例:

public static string FormatWithTrailing(decimal number)
{
    // Change the following culture to the actual desired culture
    CultureInfo culture = new CultureInfo("fr-FR");
    return number % 1 == 0 
        ? number.ToString(culture) + culture.NumberFormat.NumberDecimalSeparator 
        : number.ToString(culture);
}

输出:

123,45
345,