在使用.ToString("...")
时,是否有一种方法(在.NET中)从数字中删除尾随零,但如果数字不是整数则显示为2位小数:
是否有1个数字格式字符串可以在所有这些场景中使用?
.ToString("#.##")
几乎可以正常工作但不会显示方案2的结尾0 ...
此外,其他文化不是问题,我只想要小数点(不是逗号等)
答案 0 :(得分:6)
这些方面的东西?
if (number % 1 == 0)
Console.WriteLine(string.Format("{0:0}", number));
else
Console.WriteLine(string.Format("{0:0.00}", number));
修改
此代码中有一个小错误:) 1.001将打印为“1.00”...这可能不是您想要的,如果您需要打印1.001为“1”,您需要更改如果(...)测试检查有限公差。由于这个问题更多的是关于格式化,我将保持答案不变,但在生产代码中你可能想要考虑这种问题。
答案 1 :(得分:2)
肮脏的方式:
string.Format("{0:0.00}", number).Replace(".00","")
答案 2 :(得分:1)
不是一种格式,但它适合一行:
double a = 1.0;
string format = string.Format((a == (int)a) ? "{0:0}" : "{0:0.00}", a);
答案 3 :(得分:0)
我不能说我遇到了一个能做到这一点的面具。我会用
string output = (value % 1 > 0) ? String.Format("{0:0.00}", value) : String.Format("{0:0.##}", value);
答案 4 :(得分:0)
我猜你可以用你自己的方法来制作那个显示器,因为它是否是一个整数的条件。
public static class Extensions
{
public static string ToCustomString(this decimal d)
{
int i = (int)d;
if (i == d)
return i.ToString();
return d.ToString("#.00");
}
}
答案 5 :(得分:0)
如果您想使用它来显示货币,可以使用以下
float fVal = 1234.20f;
String strVal = fVal.Tostring("c");
答案 6 :(得分:0)
您可以编写这样的扩展方法来为您进行格式化:
public static string FormatNumberString(this double input)
{
int temp;
string inputString = input.ToString();
return Int32.TryParse(inputString, out temp) ? inputString : input.ToString("0.00");
}
答案 7 :(得分:0)
如果您希望在ASP MVC Razor中执行此操作,那么您可以试试这个
@string.Format(item.DecimalNumber % 1 == 0 ? "{0:0}" : "{0:0.00}", item.DecimalNumber)
这将表现如下:
值:2.5 - >显示:2.50
值:5 - >显示:5
价值:2.45 - >显示:2.45