双精度值的最短字符串表示形式
本文关键字:表示 字符串 双精度 | 更新日期: 2023-09-27 18:15:53
通用("G")格式说明符将数字转换为更紧凑的定点或科学记数法。问题是指数中仍然可以有前导零。
的例子:
Double d = 0.000001;
Console.WriteLine(d.ToString("G"));
1E-06
是否存在一个数字格式字符串,它将删除指数中的前导零,因此结果是
1E-6
我仍然希望函数返回定点符号,如果它更紧凑的话。换句话说,我想要双精度值的最短字符串表示。
编辑:我想这样做没有后处理
您可以使用后处理来删除前导零。
static string Compact(double d)
{
var s = d.ToString("G");
if(s.Contains("E-0") || s.Contains("E+0"))
{
s = Regex.Replace(s, @"('d+)(E[+-])0+('d+)", "$1$2$3");
}
return s;
}
使用Console.WriteLine(Compact(0.000001)); // result: 1E-6
Console.WriteLine(Compact(12342353465345432313123123123.0)); // result: 1.23423534653454E+28
Console.WriteLine(Compact(0.000011)); // result: 1.1E-5
这可以通过使用长格式来完成,并手动选择位数
Double d = 0.000001;
Console.WriteLine(d.ToString("0.###E-0"));
1E-6
我所做的确切版本将把0.0000012351573这样的数字四舍五入到1.235E-6
如果你真的想要最短的,你可以使用
Console.WriteLine(d.ToString("0E-0"));
这将四舍五入,但总是只有一个数字-例如
Double d = 0.0000018;
Console.WriteLine(d.ToString("0.###E-0"));
2E-6