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

2.4200
2.0044
2.0000

我想要这样的结果

2.42
2.0044
2

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


当前回答

我使用这个代码来避免“G29”科学符号:

public static string DecimalToString(this decimal dec)
{
    string strdec = dec.ToString(CultureInfo.InvariantCulture);
    return strdec.Contains(".") ? strdec.TrimEnd('0').TrimEnd('.') : strdec;
}

编辑:使用系统CultureInfo.NumberFormat.NumberDecimalSeparator:

public static string DecimalToString(this decimal dec)
{
    string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
    string strdec = dec.ToString(CultureInfo.CurrentCulture);
    return strdec.Contains(sep) ? strdec.TrimEnd('0').TrimEnd(sep.ToCharArray()) : strdec;
}

其他回答

取决于你的数字代表什么,以及你想如何管理这些值:它是一种货币,你需要舍入还是截断,你只需要这个舍入来显示吗?

如果用于显示,则考虑格式化数字为x.ToString("")

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx和

http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

如果只是四舍五入,请使用Math。需要midpointround重载的圆重载

http://msdn.microsoft.com/en-us/library/ms131274.aspx)

如果你从数据库中获取值,考虑转换而不是转换: double value = (decimal)myRecord["columnName"];

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

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

这很简单。

decimal decNumber = Convert.ToDecimal(value);
        return decNumber.ToString("0.####");

测试。

欢呼:)

这是我写的一个扩展方法,如果它是最后一个字符(在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;
    }
}

要从字符串变量dateTicks中删除后面的零,请使用

返回新的字符串(dateTicks.Take(dateTicks.LastIndexOf(dateTicks.Last(v => v != '0')) + 1)。ToArray());