我试图获取用户输入,解析它,然后使用 String.Format() 显示,用逗号格式化数千个。
So, if user provides
1000 I will display 1,000
1000.00 => 1,000.00
1000.0 => 1,000.0
1,000.5 => 1,000.5
基本上我想保留提供的所有小数(包括尾随零),并且只添加数千个格式。
我试过:
String.Format("{0:#,0.######}" , Decimal.Parse(input));
String.Format("{0:#,0.######}" , Double.Parse(input);
double.Parse(input)
是不行的,因为double
不记录小数位数。
decimal.Parse(input).ToString()
将表明decimal
确实记录了这一点。很遗憾,decimal.Parse(input).ToString()
使用此精度并且不使用千位分隔符,并且decimal.Parse(input).ToString("N")
忽略精度但使用千位分隔符。
不过,手动从小数中提取精度是可行的,这允许您构建正确的格式字符串:
static string InsertThousandsSeparator(string input) {
var dec = decimal.Parse(input);
var bits = decimal.GetBits(dec);
var prec = bits[3] >> 16 & 255;
return dec.ToString("N" + prec);
}
这是基于的布局decimal如 MSDN 上所述 https://msdn.microsoft.com/en-us/library/system.decimal.getbits(v=vs.110).aspx:
位 16 到 23 必须包含 0 到 28 之间的指数,表示整数除以 10 的幂。
查看它在 .NET Fiddle 上的运行情况。 https://dotnetfiddle.net/btmjm4(由@Alisson 提供)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)