特殊小数格式

时间:2010-12-02 14:36:33

标签: c# formatting decimal

是否有可以在小数上使用的字符串格式,以便获得以下结果?

123 => "123"
123.4 => "123.40"
123.45 => "123.45"
123.456 => "123.46"

在英文中,数字应始终以正好两位小数显示,除非它包含整数值,当它没有小数时(因此不允许显示“123.00”)。

5 个答案:

答案 0 :(得分:1)

我不知道有什么这样的格式,我很害怕。您可能需要使用:

string text = (d == (int) d) ? ((int) d).ToString() : d.ToString("N2");

编辑:只有当d位于int.MinValueint.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");
}