我需要将一个十进制数转换为一个带有 N 个小数位数(两个或四个),并且没有千位分隔符的字符串:
'XXXXXXX (小数点) DDDDD'
使用 CultureInfo.InvariantCulture
的问题是它在千位上放置了','进行分隔。
更新:
这对于 decimal 和 double 类型都适用。
我的之前的问题:需要将 double 或 decimal 转换为字符串
对于一个decimal
,使用ToString方法,并指定Invariant culture来获取小数点作为十进制分隔符:
value.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture)
long
类型是整数类型,因此没有小数部分。您可以将其格式化为字符串,然后再添加一些零:
value.ToString() + ".00"
自定义数字的小数点非常容易。我花了大约两个小时才弄清楚 :D。你看到你使用了当前或者其他指定的文化风格吧?那么,解析器需要的就是一个IFormatProvider。如果你将CultureInfo.CurrentCulture.NumberFormat
作为格式化程序传递给它,它就会根据你当前文化的NumberDecimalSeparator
格式化双精度浮点数。我的做法只是创建了NumberFormatInfo
类的一个新实例,并将其NumberDecimalSeparator
属性设置为我想要的任何分隔符字符串。完整的代码如下:
double value = 2.3d;
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = "-";
string x = value.ToString(nfi);
结果是?"2-3"
您可以使用
value.ToString(CultureInfo.InvariantCulture)
获取精确的双精度值,而不需要设置精度。
我更喜欢使用ToString()
和IFormatProvider
。
double value = 100000.3
Console.WriteLine(value.ToString("0,0.00", new CultureInfo("en-US", false)));
输出:10,000.30
new CultureInfo("en-US", false)
将 false 传递给构造函数告诉它不要尊重用户自定义设置。 - Carl你可以简单地使用 decimal.ToString() 方法
对于两个小数位
myDecimal.ToString("0.00");
保留四位小数
myDecimal.ToString("0.0000");
这将使用点作为小数分隔符,无论文化背景如何都不使用千位分隔符。
.
是小数分隔符的占位符,而不是字面上的 .
。因此,例如,如果你的文化是 fr-FR
,那么数字将显示为 1,23 或 1,2345 等。 - LukeH