【问题标题】:String to double issue in JavaJava中的字符串加倍问题
【发布时间】:2016-03-30 19:39:49
【问题描述】:

我在从长度大于 7 的字符串中解析双精度时遇到了一个奇怪的问题。

例如: 字符串包含值:

String str = '123456789'

当我运行以下代码时:

double d = Double.parseDouble(str);
System.out.println(d);

输出是:

1.23456789E8

数据库中存储的值为:

123456789.0000000000000000

列的数据类型为十进制(40,16)

并且没有产生异常。 请告诉我该如何处理。

【问题讨论】:

  • 对我来说似乎没问题(除了用于定义字符串的错误引号),您在哪里看到问题?
  • 1.23456789E8 = 1.23456789 * 10^8 = 123456789 = 123456789.0000000000000000 - 没问题。
  • 问题是我必须在我的网站上显示相同的值,并且在那里显示 1.23456789E8

标签: java


【解决方案1】:

1.23456789E81.23456789 x 10 ^8^,所以结果看起来应该是这样。

【讨论】:

  • 是的,但我希望它在存储在数据库中时显示出来。
  • 查看诸如 DecimalFormat 之类的东西
【解决方案2】:

1.23456789E8是科学格式,可以读成1.23456789 * Math.pow(10,8)

要以十进制格式打印,请使用:

System.out.printf("%f", d);

【讨论】:

    【解决方案3】:

    要获得不同格式的输出,例如使用

    System.out.printf("%15.7f%n", d);
    

    【讨论】:

      【解决方案4】:

      试试这个,它会帮助你得到你想要的。

      new BigDecimal(d).toPlainString()
      

      【讨论】:

      • 谢谢。现在输出很好。
      • 这种方式会为d 的大多数非整数值带来意想不到的结果。要使您的double 看起来与数据库中的内容相同,请使用BigDecimal,您最好编写BigDecimal.valueOf(d).toPlainString()
      • @DavidWallace 我很感激你想让ans更好,我没有尝试过这种方法,如果你确认然后你可以编辑那个ans,这样其他人就可以从中受益。
      【解决方案5】:
      String str = "123456789";
      double d = Double.parseDouble(str);
      System.out.printf("%f\n", d);// print 123456789.000000 
      

      另见How to print double value without scientific notation using Java?

      【讨论】:

        猜你喜欢
        • 2013-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-07
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多