Raz*_*kar 5 c# double decimal type-conversion trailing
我试图获取用户输入,解析它然后用String.Format()显示,用comas格式化数千.
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
Run Code Online (Sandbox Code Playgroud)
基本上我想保留所提供的所有小数(包括尾随零),只需添加数千的格式.我试过了:
String.Format("{0:#,0.######}" , Decimal.Parse(input));
String.Format("{0:#,0.######}" , Double.Parse(input);
Run Code Online (Sandbox Code Playgroud)
小智 7
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);
}
Run Code Online (Sandbox Code Playgroud)
这是基于MSDN上描述的布局decimal:
位16到23必须包含0到28之间的指数,表示除以整数的10的幂.
看看它在.NET Fiddle上工作.(由@Alisson提供)