【问题标题】:Converting double to string将双精度转换为字符串
【发布时间】:2011-08-11 14:23:50
【问题描述】:

我不确定是我还是什么,但我在将双精度转换为字符串时遇到问题。

这是我的代码:

double total = 44;
String total2 = Double.toString(total);

是我做错了什么还是我错过了一步。

我在尝试转换时收到错误 NumberFormatException

totalCost.setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    try {
      double priceG = Double.parseDouble(priceGal.getText().toString());
      double valG = Double.parseDouble(volGal.toString());
      double total = priceG * valG;
      String tot = new Double(total).toString();
      totalCost.setText(tot);
    } catch(Exception e) {
      Log.e("text", e.toString());
    }

    return false;
  }         
});

我正在尝试在 onTouchListener 中执行此操作。生病发布更多代码,基本上当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。

【问题讨论】:

  • 我觉得很好,你遇到了什么问题?
  • 这是您正在执行的真实代码吗?这些线条完美无缺。
  • Double.toString(double) 甚至不能抛出 NumberFormatException - 你确定异常不是从其他地方抛出的吗?
  • 一定有别的东西,这应该可以正常工作。 ideone.com/btGrv
  • 显示堆栈跟踪和整个代码

标签: java android


【解决方案1】:
double total = 44;
String total2 = String.valueOf(total);

这会将双精度转换为字符串

【讨论】:

  • 请记住以下几点
  • 上述任何解决方案?
  • @PrashanthDebbadwar 是:NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999); 然后使用total2 = fmt.format(total)
  • 这在内部调用Double.toString()。不知道它是如何回答这个问题的。
  • String.format ("%.0f", bigDouble)
【解决方案2】:

使用 Double.toString(),如果数字太小或太大,你会得到这样的科学计数法:3.4875546345347673E-6。有几种方法可以更好地控制输出字符串格式。

double num = 0.000074635638;
// use Double.toString()
System.out.println(Double.toString(num));
// result: 7.4635638E-5

// use String.format
System.out.println(String.format ("%f", num));
// result: 0.000075
System.out.println(String.format ("%.9f", num));
// result: 0.000074636

// use DecimalFormat
DecimalFormat decimalFormat = new DecimalFormat("#,##0.000000");
String numberAsString = decimalFormat.format(num);
System.out.println(numberAsString);
// result: 0.000075

使用 String.format() 将是最方便的方法。

【讨论】:

    【解决方案3】:

    此代码编译并为我工作。它使用您尝试的调用将双精度数转换为字符串。

    public class TestDouble {
    
        public static void main(String[] args) {
            double total = 44;
            String total2 = Double.toString(total);
    
            System.out.println("Double is " + total2);
        }
    }
    

    我对您看到 NumberFormatException 感到困惑。查看堆栈跟踪。我猜你还有其他代码没有在你的示例中显示导致抛出该异常。

    【讨论】:

    • 我对您看到 NumberFormatException 感到困惑。查看堆栈跟踪。我猜你还有其他代码没有在你的示例中显示导致抛出异常。
    • OP 的代码也是如此。这里没有问题需要解决。
    • 可能,我正在尝试在 onTouchListener 中执行此操作。生病发布更多代码,基本上当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。
    【解决方案4】:

    异常可能来自 parseDouble() 调用。检查赋予该函数的值是否真的反映了双精度值。

    【讨论】:

      【解决方案5】:
      double priceG = Double.parseDouble(priceGal.getText().toString());
      
      double valG = Double.parseDouble(volGal.toString());
      
      double priceG = Double.parseDouble(priceGal.getText().toString());
      
      double valG = Double.parseDouble(volGal.toString());
      
      double priceG = Double.parseDouble(priceGal.getText().toString());
      
      double valG = Double.parseDouble(volGal.toString());
      

      它有效。必须重复。

      【讨论】:

        【解决方案6】:

        科特林

        您可以在 kotlin 中的任何数据类型上直接使用.toString,例如

        val d : Double = 100.00
        val string : String = d.toString()
        

        【讨论】:

          【解决方案7】:
          double total = 44;
          String total2 = new Double(total).toString();
          

          【讨论】:

          • Double.toString() 调用 String.valueOf(double),后者调用 Double.toString(double)。疯了吧?
          • OP 的代码也是如此。这里没有问题需要解决。
          • @Muhammed - 可能吗? 它就是这样做的
          • @Muhammed - 不,效率不高。请参阅发光编码器的评论。您正在创建一个新的Double 对象,然后调用其toString() 方法,该方法调用String.valueOf(double)最终 完成了OP 一开始所做的事情。
          • @Muhammed 好吧,您创建一个对象只是为了获取它的 String 值。如果这是在某种循环中,您可能会遇到很多额外的(不必要的)开销。我不喜欢过早优化,但我喜欢避免明显的缺陷。
          【解决方案8】:
          double priceG = Double.parseDouble(priceGal.getText().toString());
          double valG = Double.parseDouble(volGal.toString());
          

          其中之一是抛出异常。您需要添加一些日志记录/打印以查看 volGalpriceGal 中的内容 - 这不是您的想法。

          【讨论】:

          • 我将总数更改为 44 这样的硬数字,但它仍然给了我一个错误。
          • 什么“总计”?您的原始代码片段无法引发该异常。我上面显示的两个调用可以。您的Strings 之一不是double 的有效表示,这就是您遇到该异常的原因。
          • 要清楚; Double.toString(total); 不能抛出异常。永远。。您将其更改为 new Double(total).toString(); 也不能,如果您在此处看到已被否决的答案,这不是您想做的事情。
          • 好吧,我改变了。我将那一点代码从 ontouchlistener 中移出,它运行良好。但是当它在 ontouchlistener 中时,它会抛出错误。我正在尝试在 onTouchListener 中执行此操作。生病发布更多代码,基本上当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。
          【解决方案9】:

          double.toString() 应该可以工作。不是变量类型Double,而是变量本身double

          【讨论】:

          • 您应该考虑到有时它会返回带有 E 科学记数法的数字,例如 -2.23561E5
          【解决方案10】:

          只需使用以下内容:

          doublevalue+""; 
          

          这适用于任何数据类型。

          示例:

          Double dd=10.09;
          String ss=dd+"";
          

          【讨论】:

          • 通过添加到空字符串来进行字符串化的非常不好的习惯。改用专用的 JDK 函数
          • @Michael.P 为什么不好?
          • 作为一名 Java 程序员,我一直在这样做,哈哈。
          • 除非有一些编译时优化在起作用,否则它会调用一个额外的构造函数和附加方法。
          • 总是使用 String.valueOf(dd) 代替。这也适用于任何数据类型。
          【解决方案11】:

          使用StringBuilder 类,像这样:

          StringBuilder meme = new StringBuilder(" ");
          
          // Convert and append your double variable
          meme.append(String.valueOf(doubleVariable));
          
          // Convert string builder to string
          jTextField9.setText(meme.toString());
          

          你会得到你想要的输出。

          【讨论】:

            【解决方案12】:

            你做的时候怎么样

            totalCost.setText(tot);
            

            你就是这样做

            totalCost.setText( "" + total );
            

            "" + 会自动转换成字符串

            【讨论】:

              【解决方案13】:

              完整信息

              您可以将 String.valueOf() 用于 float、double、int、boolean 等。

              double d = 0;
              float f = 0;
              int i = 0;
              short i1 = 0;
              char c = 0;
              boolean bool = false;
              char[] chars = {};
              Object obj = new Object();
              
              
              String.valueOf(d);
              String.valueOf(i);
              String.valueOf(i1);
              String.valueOf(f);
              String.valueOf(c);
              String.valueOf(chars);
              String.valueOf(bool);
              String.valueOf(obj);
              

              【讨论】:

                【解决方案14】:

                double转String的三种方式。

                1. Double.toString(d)
                2. String.valueOf(d)
                3. ""+d

                  公共类 DoubleToString {

                  public static void main(String[] args) {
                      double d = 122;
                      System.out.println(Double.toString(d));
                      System.out.println(String.valueOf(d));
                      System.out.println(""+d);
                  
                  }
                  

                  }

                要加倍的字符串

                1. Double.parseDouble(str);

                【讨论】:

                  【解决方案15】:

                  当您想格式化小数并将其转换为 String DecimalFormat 时会有很大帮助。

                  示例:

                  DecimalFormat format = new DecimalFormat("#.####");
                  format.format(yourDoubleObject);
                  

                  这些是在DecimalFomat 中作为模式的一部分支持的各种符号。

                  【讨论】:

                    【解决方案16】:

                    这是一篇很老的帖子,但这可能是最简单的转换方法:

                    double total = 44;
                    String total2 = "" + total;
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-10-10
                      • 2018-01-12
                      相关资源
                      最近更新 更多