C# 将小数点修改为2位小数,除非小数点超过2位

C# 将小数点修改为2位小数,除非小数点超过2位,c#,winforms,decimal,C#,Winforms,Decimal,所以这是一个有点挑剔的问题。我四处寻找类似的问题,但找不到一个能具体回答我问题的 我正在制作一个winforms应用程序,它从数字上下菜单中获取数据,并将其放入Word docvariables中。数字上下浮动的精度为4位小数,因为有些价格如00125欧元,例如打印合同。但其他价格将节省下来,例如125000欧元。我目前将数字固定为两位小数,如下所示: string value = type.GetValue().ToString().Trim(new char[] { '\'' }); //C

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

我正在制作一个winforms应用程序,它从数字上下菜单中获取数据,并将其放入Word docvariables中。数字上下浮动的精度为4位小数,因为有些价格如00125欧元,例如打印合同。但其他价格将节省下来,例如125000欧元。我目前将数字固定为两位小数,如下所示:

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.00#
将显示最小2d.p.,最大4d.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"
只需使用-
,####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"

你能举几个例子说明你希望它表现如何吗?不清楚您想要什么结果当十进制数为
125000
时,我希望它显示
12,50
。当它是
0125
01250
时,我需要它显示
0125
你能举一些例子说明你希望它的行为吗?不清楚您想要什么结果当十进制数为
125000
时,我希望它显示
12,50
。当它是
0125
01250
时,我需要它显示
0125
哇,我真的需要了解自定义格式字符串。非常感谢!哇,我真的需要学习自定义格式字符串。非常感谢!