我有一个价格字段显示,有时可以是100或100.99或100.9,我想要的是显示价格在小数点后2位,只有小数输入的价格,例如,如果它的100,它应该只显示100而不是100.00,如果价格是100.2,它应该显示100.20类似的100.22应该是一样的。 我谷歌了一下,找到了一些例子,但它们并不完全符合我想要的:

// just two decimal places
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

当前回答

老问题了,但我想在我看来添加一个最简单的选项。

没有数千个隔板:

value.ToString(value % 1 == 0 ? "F0" : "F2")

有成千上万的隔板:

value.ToString(value % 1 == 0 ? "N0" : "N2")

与String相同。格式:

String.Format(value % 1 == 0 ? "{0:F0}" : "{0:F2}", value) // Without thousands separators
String.Format(value % 1 == 0 ? "{0:N0}" : "{0:N2}", value) // With thousands separators

如果你在很多地方都需要它,我会在一个扩展方法中使用这个逻辑:

public static string ToCoolString(this decimal value)
{
    return value.ToString(value % 1 == 0 ? "N0" : "N2"); // Or F0/F2 ;)
}

其他回答

很抱歉重新激活这个问题,但我在这里没有找到正确的答案。

在格式化数字时,可以使用0作为必选位置,使用#作为可选位置。

So:

// just two decimal places
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

你也可以把0和#结合起来。

String.Format("{0:0.0#}", 123.4567)       // "123.46"
String.Format("{0:0.0#}", 123.4)          // "123.4"
String.Format("{0:0.0#}", 123.0)          // "123.0"

对于这种格式化方法,总是使用CurrentCulture。对于某些文化。将改为,。

原问题的答案:

最简单的解决方案来自@Andrew(这里)。所以我个人会使用这样的方法:

var number = 123.46;
String.Format(number % 1 == 0 ? "{0:0}" : "{0:0.00}", number)

简单的一行代码:

public static string DoFormat(double myNumber)
{
    return string.Format("{0:0.00}", myNumber).Replace(".00","");
}

恐怕没有内置格式可以做到这一点。您必须使用不同的格式,这取决于该值是否为整数。或者始终格式化到小数点后2位,然后操作字符串以删除任何尾随的“.00”。

Try:

String.Format("{0:0.00}", Convert.ToDecimal(totalPrice));

try

double myPrice = 123.0;

String.Format(((Math.Round(myPrice) == myPrice) ? "{0:0}" : "{0:0.00}"), myPrice);