Double ToString() 没有科学记数法,不返回 0.0 的字符串

Posted

技术标签:

【中文标题】Double ToString() 没有科学记数法,不返回 0.0 的字符串【英文标题】:Double ToString() no scientific notation not returning a string for 0.0 【发布时间】:2013-10-11 13:01:57 【问题描述】:

我需要以十进制而不是科学的形式返回双精度的字符串表示,我在这里使用了已接受解决方案的修改版本:

Double ToString - No Scientific Notation

private static readonly string format = "." + new string('#', 324);
foo.ToString(format);

除了对于等于零的值(即 0、0.0、0.000 等返回空字符串)之外,这很有效。

对于任何零值,返回代表 0 的字符串的最简单方法是什么。

我不介意字符串是 0 还是 0.0 等,只要它是数字的而不是科学的。

编辑:我知道我可以添加一个条件语句来检查字符串是否为空,但我很想看看是否有办法使用字符串格式化。

【问题讨论】:

【参考方案1】:

您总是可以添加如下语句:

foo.ToString(format)

if (string.IsNullOrEmpty(foo))
foo = "0";

【讨论】:

我知道这是一个很好的答案,所以你会得到一个赞成票,但我希望有一种不那么老套的方法。【参考方案2】:

试试这个:

  string format = "0." + new string('#', 324);

它会在点之前添加零(如果需要)

参见示例ideone

【讨论】:

谢谢,但我也试过了。对于第一个,我希望它返回“0.9”。第二个基本上正是我所做的,因为双精度值是 0.0,它返回一个空字符串。所以我删除了“#”中的#。因为它没有任何区别。不过,可能应该把它放在原来的问题中。【参考方案3】:

也许这就是你要找的东西:

        double aa = 12.33333;

        string foo = String.Format("0:0.#", System.Convert.ToSingle(aa));

【讨论】:

我没有,但因为这只是 yourDouble.ToString() 的包装器,我想它会返回与在双精度上调用 ToString() 相同的结果?所以它会为 ToString 返回一个 0,但我无法将其格式化为不对大小数使用科学记数法。 为什么要转换成Single(即float)?【参考方案4】:

啊,人们使用的那些黑客。在这里再给一个技巧:

foo.ToString(format + ";" + "-" + format + ";" + "0");

或与

static readonly string newFormat = format + ";" + "-" + format + ";" + "0";

在代码源中定义format,就:

foo.ToString(newFormat);

当然这是一个常数,所以它确实是:

foo.ToString(.####################################################################################################################################################################################################################################################################################################################################;-.####################################################################################################################################################################################################################################################################################################################################;0);

希望你喜欢(我不喜欢)。

【讨论】:

以上是关于Double ToString() 没有科学记数法,不返回 0.0 的字符串的主要内容,如果未能解决你的问题,请参考以下文章

decimal and double ToString problem

java中数值类型转换的问题,double类型显示科学计数法了。

如何使java中double类型不以科学计数法表示

double转成string时,不以科学计数法表示

C#科学计数字符串,如“7.1e-003”转换为decimal类型数据

使用 DecimalFormat 格式化 Double 以在没有科学计数法的情况下打印