73 可读性
 将光标移到文章中的句子上,可以查看原文。 显示译文      显示原文      双语对照

分享 |
删除尾部的零?
Remove trailing zeros?

59 0

我有一些字段返回的集合作为

2.4200
2.0044
2.0000

我想的结果一样

2.42
2.0044
2

我竭尽全力想使String .Format,但是它也返回2 .0000并将它设置为另一个值的N0子弹。

编辑:

我虽然其标为答案,但是不明白在来选择哪一种都行。 fasih也确实给了一个非常酷的解决方法。 如果版主知道哪个是最适合的技术以上则可以恢复到该标记。

时间: 15年08月05日 原作者: svick
最初记录类型是string?
请参见我的答案: String.Format()与'G'应该能给你想要的。 我已经更新了答案中的链接可以转到标准数字格式。 非常userful 。
decimal可以casted到 double,默认值 ToString对于双发出后续零。 阅读此 ?
而且它可能会包含大量的记录) 的性能( interms低于成本把" g " 为字符串格式。 ToString函数。
另一个类似的问题: stackoverflow .com/questions/2109494?

55 0

这真的没那么简单这一点,如果输入的是一个字符串? 你可以使用以下方法之一:

string.Format("{0:G29}", decimal.Parse("2.0044"))

decimal.Parse("2.0044").ToString("G29")

2.0m.ToString("G29")

这将作用于所有输入。

Update Check出 Standard Numeric Formats 我不得不显式地设置精度说明符到29解释为文档清楚地说明:

但是,如果数字是Dec我al并且省略精度说明符,将总是使用定点表示法并保留尾部的零。

Update Konrad 在评论中指出,?

就想到了类似于0 .000001值。 g29格式将它们呈现在最短的路,那么就会切换到小数位数。 string.Format("{0:G29}", decimal.Parse("0.00000001",System.Globalization.CultureInfo.GetCultureInfo("en-US")))给" 1E 08 " 作为结果。

发布时间: 15年08月05日 原作者: gunr2171
89 0

我遇到了同样的问题,但是在一种情况,我也不知道控件来设置输出到字符串里面有处理好的一个库。 在研究细节的实现中有Dec我al类型( 参见 http://msdn .microsoft .com/en us/library/system.dec我al.getbits aspx ),我想到了一个很巧妙( 在这里是扩展方法) :

public static decimal Normalize(this decimal value)
{
    return value/1.000000000000000000000000000000000m;
}

指数的十进制是变成了所需内容的一部分。 上调用ToString( ) 输出十进制把数字去掉所有末尾写入0 。 e .g 。

1.200m.Normalize().ToString();
发布时间: 15年08月05日 原作者: Thomas Materna
27 0

我觉得这样更安全借 Custom Numeric Format Strings

decimal d = 0.00000000000010000000000m;
string custom = d.ToString("0.#########################");
// gives: 0,0000000000001
string general = d.ToString("G29");
// gives: 1E-13
发布时间: 15年08月05日 原作者: Michał Powaga
9 0

这就像你所需要的:

如果初始值为 decimal:

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

如果初始值为 string:

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

,应该成本最低的性能。

发布时间: 15年08月05日 原作者: Shimmy
5 0

我找了个好办法从 http://dobrzanski .net/2009/05/14/cdec我altostring以及如何去除尾随zeros/

基本上

十进制v=2 .4200M ;

v .ToString( " # .###### " ),.42 //将返回2 。 # 是的个数有多少个十进制数字支持。

发布时间: 15年08月05日 原作者: DHornpout
2 0

取决于你的序号代表你想如何管理这些值: 货币,你需要舍入或者截断的,你要有这么多舍入仅显示?

如果要显示考虑格式化数字为x .ToString( " " )

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

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

如果只是取整,请使用Math .Round重载需要MidPointRounding重载

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

如果从数据库中把你的值考虑转换代替转换: 双精度值= ( 十进制) myRecord[ " columnName " ] ;

发布时间: 15年08月05日 原作者: Florin
1 0

一个很低级的方法,但是我belive,这种方法将是最资料会通过只使用简单的整数计算( 并不缓慢字符串解析文化敏感的方法) :

public static decimal Normalize(this decimal d)
{
    int[] bits = decimal.GetBits(d);

    int sign = bits[3] & (1 << 31);
    int exp = (bits[3] >> 16) & 0x1f;

    uint a = (uint)bits[2]; // Top bits
    uint b = (uint)bits[1]; // Middle bits
    uint c = (uint)bits[0]; // Bottom bits

    while (exp > 0 && ((a % 5) * 6 + (b % 5) * 6 + c) % 10 == 0)
    {
        uint r;
        a = DivideBy10((uint)0, a, out r);
        b = DivideBy10(r, b, out r);
        c = DivideBy10(r, c, out r);
        exp--;
    }

    bits[0] = (int)c;
    bits[1] = (int)b;
    bits[2] = (int)a;
    bits[3] = (exp << 16) | sign;
    return new decimal(bits);
}

private static uint DivideBy10(uint highBits, uint lowBits, out uint remainder)
{
    ulong total = highBits;
    total <<= 32;
    total = total | (ulong)lowBits;

    remainder = (uint)(total % 10L);
    return (uint)(total / 10L);
}
发布时间: 15年08月05日 原作者: Bigjim
1 0

截断尾随Zeros其实很简单,解决,双工强制转换:

        decimal mydecimal = decimal.Parse("1,45000000"); //(I)
        decimal truncate = (decimal)(double)mydecimal;   //(II)

( i ) >解析十进制值来源的任意字符串。

( iI ) >第一步: 强制转换为double这个移除尾随零。 首先: 隐式转换其他强制转换为dec我al,因为不存在从dec我al到double或者相反)

发布时间: 15年08月05日 原作者: amedriveroperez
0 0

请尝试以下代码:

string value = "100";
value = value.Contains(".") ? value.TrimStart('0').TrimEnd('0').TrimEnd('.') : value.TrimStart('0');
发布时间: 15年08月05日 原作者: Raging Bull
0 0

使用hash ( 。 #) 符号只显示后缀0 的时候是必要的。 请参见下面的测试。

decimal num1 = 13.1534545765;
decimal num2 = 49.100145;
decimal num3 = 30.000235;

num1.ToString("0.##");       //13.15%
num2.ToString("0.##");       //49.1%
num3.ToString("0.##");       //30%
发布时间: 15年08月05日 原作者: Fizzix
...