我有一些由集合返回的字段

2.4200
2.0044
2.0000

我想要这样的结果

2.42
2.0044
2

我试过用String。格式,但它返回2.0000,并将其设置为N0也会四舍五入其他值。


当前回答

如果你想保持十进制数,试试下面的例子:

number = Math.Floor(number * 100000000) / 100000000;

其他回答

像这样试试

string s = "2.4200";

s = s.TrimStart("0").TrimEnd("0", ".");

然后把它转换成浮点数

你可以设置为:

decimal decNumber = 23.45600000m;
Console.WriteLine(decNumber.ToString("0.##"));

非常简单的答案是使用TrimEnd()。这是结果,

double value = 1.00;
string output = value.ToString().TrimEnd('0');

输出为1 如果我的值是1.01,那么输出将是1.01

我从http://dobrzanski.net/2009/05/14/c-decimaltostring-and-how-to-get-rid-of-trailing-zeros/上找到了一个优雅的解决方案

基本上

decimal v=2.4200M;

v.ToString("#.######"); // Will return 2.42. The number of # is how many decimal digits you support.

尝试做更友好的解决方案DecimalToString (https://stackoverflow.com/a/34486763/3852139):

private static decimal Trim(this decimal value)
{
    var s = value.ToString(CultureInfo.InvariantCulture);
    return s.Contains(CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator)
        ? Decimal.Parse(s.TrimEnd('0'), CultureInfo.InvariantCulture)
        : value;
}

private static decimal? Trim(this decimal? value)
{
    return value.HasValue ? (decimal?) value.Value.Trim() : null;
}

private static void Main(string[] args)
{
    Console.WriteLine("=>{0}", 1.0000m.Trim());
    Console.WriteLine("=>{0}", 1.000000023000m.Trim());
    Console.WriteLine("=>{0}", ((decimal?) 1.000000023000m).Trim());
    Console.WriteLine("=>{0}", ((decimal?) null).Trim());
}

输出:

=>1
=>1.000000023
=>1.000000023
=>