我有一些由集合返回的字段
2.4200
2.0044
2.0000
我想要这样的结果
2.42
2.0044
2
我试过用String。格式,但它返回2.0000,并将其设置为N0也会四舍五入其他值。
我有一些由集合返回的字段
2.4200
2.0044
2.0000
我想要这样的结果
2.42
2.0044
2
我试过用String。格式,但它返回2.0000,并将其设置为N0也会四舍五入其他值。
当前回答
非常简单的答案是使用TrimEnd()。这是结果,
double value = 1.00;
string output = value.ToString().TrimEnd('0');
输出为1 如果我的值是1.01,那么输出将是1.01
其他回答
这很简单。
decimal decNumber = Convert.ToDecimal(value);
return decNumber.ToString("0.####");
测试。
欢呼:)
这个怎么样:
public static string TrimEnd(this decimal d)
{
string str = d.ToString();
if (str.IndexOf(".") > 0)
{
str = System.Text.RegularExpressions.Regex.Replace(str.Trim(), "0+?$", " ");
str = System.Text.RegularExpressions.Regex.Replace(str.Trim(), "[.]$", " ");
}
return str;
}
像这样试试
string s = "2.4200";
s = s.TrimStart("0").TrimEnd("0", ".");
然后把它转换成浮点数
如果输入是一个字符串,它不是这么简单吗?你可以使用其中一个:
string.Format("{0:G29}", decimal.Parse("2.0044"))
decimal.Parse("2.0044").ToString("G29")
2.0m.ToString("G29")
这应该适用于所有输入。
我必须显式地将精度说明符设置为29,因为文档清楚地声明:
但是,如果数字是Decimal且省略了精度说明符,则始终使用定点表示法并保留后面的零
Konrad在评论中指出:
注意像0.000001这样的值。G29格式将以最短的方式表示它们,因此它将切换到指数符号。字符串。Format("{0:G29}", decimal.Parse("0.00000001",System.Globalization.CultureInfo.GetCultureInfo("en-US")))将给出"1E-08"作为结果。
我遇到了同样的问题,但在我无法控制输出到字符串的情况下,这是由库处理的。在详细了解了Decimal类型的实现(参见http://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx)后, 我想出了一个巧妙的技巧(这里是一个扩展方法):
public static decimal Normalize(this decimal value)
{
return value/1.000000000000000000000000000000000m;
}
小数点的指数部分被缩减为所需的部分。对输出小数调用ToString()将写入不带任何0的数字。如。
1.200m.Normalize().ToString();