提问者:小点点

使用字符串格式显示最多2位的小数或简单整数


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

共3个答案

匿名用户

一种不雅的方式是:

var my = DoFormat(123.0);

如下:

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;
    }
}

不优雅但在一些项目中为我在类似的情况下工作。

匿名用户

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

在格式化数字时,您可以将用作必填位置,将用作可选位置。

所以:

// 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"

您还可以将组合使用。

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"

对于此格式方法,始终使用。对于某些区域性,将更改为

最简单的解决方案来自@andrew(here)。所以我个人会用这样的东西:

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

匿名用户

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

不幸的是,所有内置的单字母格式字符串(如F,G,N)都不能直接实现这一点。br>例如,总是显示两位小数,如

您必须使用模式,即使它看起来有点冗长。

完整的代码示例:

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