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

2.4200
2.0044
2.0000

我想要这样的结果

2.42
2.0044
2

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


当前回答

在我看来,使用自定义数字格式字符串更安全。

decimal d = 0.00000000000010000000000m;
string custom = d.ToString("0.#########################");
// gives: 0,0000000000001
string general = d.ToString("G29");
// gives: 1E-13

其他回答

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

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

这是可行的:

decimal source = 2.4200m;
string output = ((double)source).ToString();

或者如果你的初始值是string:

string source = "2.4200";
string output = double.Parse(source).ToString();

请注意这条评论。

这是我写的一个扩展方法,如果它是最后一个字符(在0被删除之后),它也会删除点或逗号:

public static string RemoveZeroTail(this decimal num)
{
    var result = num.ToString().TrimEnd(new char[] { '0' });
    if (result[result.Length - 1].ToString() == "." || result[result.Length - 1].ToString() == ",")
    {
        return result.Substring(0, result.Length - 1);
    }
    else
    {
        return result;
    }
}

试试下面的代码:

string value = "100";
value = value.Contains(".") ? value.TrimStart('0').TrimEnd('0').TrimEnd('.') : value.TrimStart('0');

下面的代码将能够删除后面的0。我知道这很难,但很有效。

private static string RemoveTrailingZeros(string input) 
{
    for (int i = input.Length - 1; i > 0; i-- )
    {
        if (!input.Contains(".")) break;
        if (input[i].Equals('0'))
        {
            input= input.Remove(i);
        }
        else break;
    }
    return input;
}