是否有可以在小数上使用的字符串格式,以便获得以下结果?
123 => "123"
123.4 => "123.40"
123.45 => "123.45"
123.456 => "123.46"
在英文中,数字应始终以正好两位小数显示,除非它包含整数值,当它没有小数时(因此不允许显示“123.00”)。
答案 0 :(得分:1)
我不知道有什么这样的格式,我很害怕。您可能需要使用:
string text = (d == (int) d) ? ((int) d).ToString() : d.ToString("N2");
编辑:只有当d
位于int.MinValue
和int.MaxValue
之间时,上述代码才有效。显然你可以比使用long
更好,但如果你想覆盖decimal
的全部范围,你需要更强大的东西。
答案 1 :(得分:0)
也许并不理想,但却是一个起点。只需格式化为2位小数,并将任何.00替换为空字符串。
decimal a = 123;
decimal b = 123.4M;
decimal c = 123.456M;
Debug.Assert(a.ToString("0.00").Replace(".00", "") == "123");
Debug.Assert(b.ToString("0.00").Replace(".00", "") == "123.40");
Debug.Assert(c.ToString("0.00").Replace(".00", "") == "123.46");
答案 2 :(得分:0)
您可以使用“#。##”作为格式字符串。所以:
123.23.ToString("#.##") => 123.23
123.00.ToString("#.##") => 123
有一点需要注意:
123.001.ToString("#.##") => 123
但这是否可以接受取决于你。
答案 3 :(得分:0)
首先应使用Math.Round方法,然后使用toString()转换
//123.456 => "123.46"
myDecimal = Math.Round(myDecimal, 2);
第二个参数是要舍入的小数位数 然后你执行以下操作:
myDecimal.ToString();
实际上并不真正需要N2,这样你就可以在舍入后“按原样”显示数字,即如果在点之后没有小数则为124,或者在舍入123.456之后为123.46
答案 4 :(得分:0)
这样的东西?
public static string ToSpecialFormatString(this decimal val)
if (val == Math.Floor(val))
{
return val.ToString("N0");
}
return val.ToString("N2");
}