C#将字符串转换为double/decimal并返回到字符串,保留尾随零,为数千添加coma

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提供)