所以这是一个挑剔的问题。我一直在寻找类似的问题,但找不到专门回答我问题的问题。
我制作了一个winforms应用程序,可以从数字更新中获取数据,并将它们放在Word docvararia中。数字更新具有4个小数位的精度,因为有一些价格,例如€0,0125,例如打印合同。但其他价格将被保存,例如12,5000欧元。我目前用2个小数位来固定数字,如下所示:
string value = type.GetValue().ToString().Trim(new char[] { '\'' });
//Changes commas for European standard and removes the excess zeros after the comma.
if (type.GetType().ToString().EndsWith("Decimal"))
{
string s;
string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
if (sep == ".")
s = double.Parse(value).ToString("n2").Replace('.', ',');
else
s = double.Parse(value).ToString("n2");
wordDoc.Variables[type.GetName()].Value = s;
}
else
wordDoc.Variables[type.GetName()].Value = value;
但我似乎无法弄清楚如何检测小数何时不应该被修剪。我不一定需要代码示例,如果有人能够让我走上正确的道路,这将是一个重要的帮助。
注意:更改数字向上的精度并不是一个选项,因为它们是由方法动态创建的。
答案 0 :(得分:2)
只需使用custom format string - #,##0.00##
即可显示至少2 d.p.最多4 d.p。
decimal x = 12.50000m;
decimal y = 0.0125m;
string sx = x.ToString("#,##0.00##"); // "12.50"
string sy = y.ToString("#,##0.00##"); // "0.125"
如果您需要逗号小数分隔符,请使用适当的CultureInfo
或使用正确的属性创建NumberFormatInfo
:
var nfi = new NumberFormatInfo
{
NumberDecimalSeparator = ",",
NumberGroupSeparator = ".",
};
string s = 1234.56m.ToString("#,##0.00##", nfi); // "1.234,56"