将十进制修剪为2位小数除外,如果小数位数超过2位小数

时间:2016-10-20 08:09:22

标签: c# winforms decimal

所以这是一个挑剔的问题。我一直在寻找类似的问题,但找不到专门回答我问题的问题。

我制作了一个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;

但我似乎无法弄清楚如何检测小数何时不应该被修剪。我不一定需要代码示例,如果有人能够让我走上正确的道路,这将是一个重要的帮助。

注意:更改数字向上的精度并不是一个选项,因为它们是由方法动态创建的。

1 个答案:

答案 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"