数值格式化字符“N”在Windows里保留2位小数,但是在Linux/Mac OS里保留3位小数

凭以往的经验,当我们需要把一个数值格式化为带千分符和2位小数的字符串时,N是个非常方便的格式化字符。

看一段非常简单的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
using System;

namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
decimal d = 1234567.56789m;
Console.WriteLine("{0:N}", d);
}
}
}

毫无疑问,我希望这段代码的输出为1,234,567.57,在 Windows 系统里结果的确如此,但是在 Linux/Mac OS 里,结果却是1,234,567.568,保留了3位小数,我真 (╯‵□′)╯︵┻━┻

我猜这是 Linux/Mac OS 里的标准或者约定?如果真是这样的话,我就比较无奈了,为了让我们的项目无论在什么操作系统下都有一致的输出,要么不使用N,要么在 Windows 和 Linux/Mac OS 下使用不同的格式化字符,比如:

1
2
3
4
5
6
// using System.Runtime.InteropServices;

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
Console.WriteLine("{0:N}", d);
else
Console.WriteLine("{0:#,##0.00}", d);

留言

2016-07-21