我有一个价格字段显示,有时可以是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"

当前回答

try

double myPrice = 123.0;

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

其他回答

像这样的东西也可以:

String.Format("{0:P}", decimal.Parse(Resellers.Fee)).Replace(".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 ;)
}

这是一个常见的格式化浮点数用例。

不幸的是,所有内置的单字母格式字符串(例如。F, G, N)不会直接实现这个。 例如,num.ToString("F2")将始终显示小数点后2位,如123.40。

你必须用0。##模式,即使它看起来有点啰嗦。

一个完整的代码示例:

double a = 123.4567;
double b = 123.40;
double c = 123.00;

string sa = a.ToString("0.##"); // 123.46
string sb = b.ToString("0.##"); // 123.4
string sc = c.ToString("0.##"); // 123

不优雅的说法是:

var my = DoFormat(123.0);

DoFormat是这样的:

public static string DoFormat( double myNumber )
{
    var s = string.Format("{0:0.00}", myNumber);

    if ( s.EndsWith("00") )
    {
        return ((int)myNumber).ToString();
    }
    else
    {
        return s;
    }
}

不是很优雅,但在一些项目中,我遇到了类似的情况。

试试这个

string Output = String.Format("{0:0.00}", Decimal.Parse(InputStringValue));