将decimal修剪为小数点后2位,除非decimal的小数位数大于2位

本文关键字:decimal 2位 小数 大于 除非 小数点 修剪 | 更新日期: 2023-09-27 18:14:08

这是一个有点挑剔的问题。我四处寻找类似的问题,但没有找到一个具体回答我的问题。

我正在制作一个winforms应用程序,从数据中获取数据,除其他外,数字上下起伏,并将它们放在Word文档变量中。数字上下限的精度为小数点后4位,因为有一些价格,如€0,125,例如打印合同。但其他价格将得到节省,例如125000欧元。我目前将数字固定为小数点后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;

但是我似乎不知道如何检测何时小数不应该被修剪。我不一定需要代码示例,如果有人能告诉我正确的方向,那将是一个很大的帮助。

注意:改变数值上下的精度并不是一个真正的选择,因为它们是由一个方法动态创建的。

将decimal修剪为小数点后2位,除非decimal的小数位数大于2位

只需使用自定义格式字符串- #,##0.00##将显示最小为2dp,最大为4dp。

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"