【问题标题】:Java Double to String conversion without formattingJava Double 到 String 的转换,无需格式化
【发布时间】:2009-10-27 14:11:39
【问题描述】:

我的号码是 654987。它是数据库中的一个 ID。我想将其转换为字符串。 常规的 Double.ToString(value) 使其成为科学形式,6.54987E5。我不想要的东西。

我发现的其他格式化函数检查当前语言环境并添加适当的千位分隔符等。由于它是一个 ID,我根本无法接受任何格式。

怎么做?

[编辑]澄清:我正在研究一个将所有数字列视为双精度的特殊数据库。 Double 是我可以从数据库中检索的唯一(数字)类型。

【问题讨论】:

标签: java string format double


【解决方案1】:

使用固定的NumberFormat(特别是DecimalFormat):

double value = getValue();
String str = new DecimalFormat("#").format(value);

或者简单地转换为int(或long,如果值的范围太大):

String str = String.valueOf((long) value);

但话又说回来:为什么你首先在 double 变量中有一个整数值(即“整数”)?

【讨论】:

  • double 的原因是我正在使用一个将所有数字列都视为双精度的数据库。
  • 如果将 double 转换为 long,有时值会发生变化。例如:((long) ((double)25891000000002001L)) 变为 25891000000002000L
【解决方案2】:

长期使用:

long id = 654987;
String str = Long.toString(id);

【讨论】:

    【解决方案3】:

    如果它是数据库中的整数 id,请改用 Integer。然后它将格式化为整数。

    【讨论】:

    • 当然,在一个完美的世界中,但问题的原因是我试图解决数据库中的限制;它可以存储的唯一(数字)类型是双精度数。
    【解决方案4】:

    String.valueOf((long)value);怎么样

    【讨论】:

      【解决方案5】:

      怎么样:

      Long.toString(value)
      

      new String(value)
      

      【讨论】:

      • 请不要推荐""+value!这是一种黑客行为,并没有以任何方式传达意图。我会说这至少是一种糟糕的风格。
      • 好的 :) 将其替换为“新字符串(值)”。
      • new String(value) 如果值是double,则与问题提到的问题相同。
      • new String(long) 在 Java 中不存在
      【解决方案6】:

      你也可以使用

      double value = getValue();
      
      NumberFormat f = NumberFormat.getInstance();
      f.setGroupingUsed(false);
      
      String strVal = f.format(value);
      

      【讨论】:

        【解决方案7】:

        如果您要存储的是 ID(即仅用于标识另一个实体的东西,其实际数值没有意义),那么您不应该使用 Double 来存储它。精确度几乎肯定会让你大吃一惊。

        如果您的数据库不允许整数值,那么您应该将 ID 存储为字符串。如有必要,使字符串成为您要使用的整数的字符串表示形式。通过适当使用前导零,您可以使字符串的字母顺序与整数的数字顺序相同。

        这应该可以解决问题。

        【讨论】:

        • 遗憾的是,数据库及其数据类型都已设置。我要处理的列是双列,对此我无能为力。当读取数据库时,我当然会快速将其转换为 int 以供内部使用(或您建议的字符串)。这并不重要,因为问题是实际转换,因为我无法更改数据库的内容或布局。
        【解决方案8】:

        Long.toString((long)value) 呢?

        【讨论】:

          【解决方案9】:
              double d = 56789;
              String s = d+"";
          

          【讨论】:

          • 这不是调用 Double.toString(d) 吗?默认情况下,如果我没记错的话,会同时添加科学记数法和千位分隔符(如有必要)。
          猜你喜欢
          • 1970-01-01
          • 2013-05-02
          • 1970-01-01
          • 2022-01-10
          • 1970-01-01
          • 2015-10-17
          • 1970-01-01
          相关资源
          最近更新 更多