我有一些集合返回的字段为
2.4200
2.0044
2.0000
Run Code Online (Sandbox Code Playgroud)
我想得到的结果
2.42
2.0044
2
Run Code Online (Sandbox Code Playgroud)
我尝试过String.Format,但它返回2.0000并将其设置为N0舍入其他值.
Tho*_*rna 183
我遇到了同样的问题,但是在我无法控制输出到字符串的情况下,这是由库来处理的.在查看Decimal类型的实现细节之后(参见http://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx),我想出了一个巧妙的技巧(这里作为扩展)方法):
public static decimal Normalize(this decimal value)
{
return value/1.000000000000000000000000000000000m;
}
Run Code Online (Sandbox Code Playgroud)
十进制的指数部分减少到所需的数量.在输出小数上调用ToString()将写入数字而不会有任何尾随0.例如
1.200m.Normalize().ToString();
Run Code Online (Sandbox Code Playgroud)
Dog*_*ars 154
如果输入是一个字符串,它不是这么简单吗?您可以使用以下方法之一:
string.Format("{0:G29}", decimal.Parse("2.0044"))
decimal.Parse("2.0044").ToString("G29")
2.0m.ToString("G29")
Run Code Online (Sandbox Code Playgroud)
这适用于所有输入.
更新检查标准数字格式我必须明确地将精度说明符设置为29,因为文档清楚地说明:
但是,如果数字是十进制并且省略精度说明符,则始终使用定点表示法并保留尾随零
注意像0.000001这样的值.G29格式将以最短的方式呈现它们,因此它将切换到指数表示法.
string.Format("{0:G29}", decimal.Parse("0.00000001",System.Globalization.CultureInfo.GetCultureInfo("en-US")))将给出"1E-08"作为结果.
Mic*_*aga 83
在我看来,使用自定义数字格式字符串更安全.
decimal d = 0.00000000000010000000000m;
string custom = d.ToString("0.#########################");
// gives: 0,0000000000001
string general = d.ToString("G29");
// gives: 1E-13
Run Code Online (Sandbox Code Playgroud)
小智 29
我使用此代码来避免"G29"科学记数法:
public static string DecimalToString(decimal dec)
{
string strdec = dec.ToString(CultureInfo.InvariantCulture);
return strdec.Contains(".") ? strdec.TrimEnd('0').TrimEnd('.') : strdec;
}
Run Code Online (Sandbox Code Playgroud)
Fiz*_*zix 14
使用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%
Run Code Online (Sandbox Code Playgroud)
DHo*_*out 10
我找到了一个优雅的解决方案来自http://dobrzanski.net/2009/05/14/c-decimaltostring-and-how-to-get-rid-of-trailing-zeros/
基本上
十进制v = 2.4200M;
v.ToString( "#######"); //将返回2.42.#的数量是您支持的十进制数.
小智 5
这很简单。
decimal decNumber = Convert.ToDecimal(value);
return decNumber.ToString("0.####");
Run Code Online (Sandbox Code Playgroud)
已测试。
干杯:)