需要特定的十进制格式 - 只能使用格式字符串?

时间:2016-02-12 03:30:52

标签: c# .net formatting

示例代码

    private void DoShow(decimal d)
    {
        MessageBox.Show(d.ToString("#,0.##"));
    }

    private void button1_Click(object sender, EventArgs e)
    {
        DoShow(1200m);  // A - desired result : "1,200"
        DoShow(1200.60m);  // B - desired result : "1,200.60"
        DoShow(1200.58m);  // C - desired result : "1,200.58"
        DoShow(120m);  // D - desired result : "120"
    }

我正在尝试将十进制值格式化为字符串,如上面的“所需结果”所示。使用的格式代码让我关闭,但案例B)返回“1,200.6”。

金额是货币价值,但我不想要美元符号。当美分为零时,我不想显示美分。否则,我想显示2位小数的美分。如果超过999,美元价值应该有逗号。

仅使用格式字符串可以实现吗? (它将在SSRS中使用,因此格式字符串解决方案最有效)。

2 个答案:

答案 0 :(得分:2)

您所询问的内容没有具体的格式规则。如果要有条件地格式化SSRS中列中的值,可以尝试使用如下表达式:

=IIF((Fields!myField.Value - CInt(Fields!myField.Value)) > 0, 
Format(Fields!myField.Value, "#,###.#0"),Format(Fields!myField.Value, "#,###"))

答案 1 :(得分:1)

private void DoShow(decimal d)
{
    var delim = (d.ToString().Contains('.')) ? "#,###.#0" : "#,###";
    MessageBox.Show(d.ToString(delim));
}

这对我来说很好。虽然不是很好,但不是最好的实现。