fos*_*son 13 .net c# decimal string-formatting
我想将小数转换为字符串,逗号为数千个分隔符,并保留创建小数的相同精度.(将有2-5位有关数字)
decimal d = 1234.4500M;
//I'd like "1,234.4500"
var notRight = d.ToString("###,###.#######"); //1,234.45
var alsoNotRight = d.ToString("###,###.00000");; //1,234.45000
var notRightEither = d.ToString("N"); //1,234.45
var notRightEither2 = d.ToString("G"); //1234.45000
Run Code Online (Sandbox Code Playgroud)
如果不手动解析字符串,是否没有内置方法可以做到这一点?如果没有单一格式字符串,最简单的方法是什么?
Pan*_*vos 13
根据文档,十进制数保留尾随零.如果使用"G"说明符或根本没有说明符,则可以显示它们.当您使用包含千位分隔符的说明符之一时,它们会丢失.
如果要在转换为字符串时指定尾随零的数量,可以通过在格式字符后添加精度说明符(0到99位)来完成,如下所示:
decimal d=1234.45M;
var numberAsString=d.ToString("N4");
Run Code Online (Sandbox Code Playgroud)
结果将是
1,234.4500
Run Code Online (Sandbox Code Playgroud)
更新: 您可以使用Decimal.GetBits方法获取小数位数,该方法返回数字的二进制表示形式.小数位数存储在第四个元素的位16-23(第三个字节)中.
The fourth element of the returned array contains the scale factor and sign. It consists of the following parts:
...
Bits 16 to 23 must contain an exponent between 0 and 28, which indicates the power of 10 to divide the integer number.
使用所有数字获取字符串表示可以这样做:
decimal d=1234.45000M;
var nums=Decimal.GetBits(d);
var decimals=BitConverter.GetBytes(nums[3])[2];
var formatStr="N"+decimals;
d.ToString(formatStr);
Run Code Online (Sandbox Code Playgroud)
这将产生
1,234.45000
Run Code Online (Sandbox Code Playgroud)