我正在与第三方系统交互,要求我发送十进制数字,其中小数逗号必须在小数部分之前。如果该值没有小数部分,则必须仍然存在小数点逗号。
所以例如
decimal d = 123.45M; //needs to become 123,45
decimal d2 = 345M; //needs to become 345,
为此目的,是否有一种格式化.net小数的优雅方法?
答案 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,