将double转换为字符串


201

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

这是我的代码:

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中执行此操作。病态发布更多代码,基本上是当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。


4
对我来说似乎很好,您遇到了什么问题?
MByD 2011年

2
那是您正在执行的真实代码吗?这些线条完美。
mcabral 2011年

1
Double.toString(double)甚至不能引发NumberFormatException-您确定不是从其他地方引发了异常吗?
2011年

1
必须有其他东西,这应该可以正常工作。ideone.com/btGrv
凯文

1
显示
堆栈跟踪

Answers:


453
double total = 44;
String total2 = String.valueOf(total);

这会将double转换为String


22
请记住以下几点,如果total = 1234567890123456,则字符串变成“ 1.234567890123456E15”,这通常不是您想要的
user1735824

6
以上任何解决方案?
Prashanth Debbadwar '17

6
@PrashanthDebbadwar是:NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);然后使用total2 = fmt.format(total)
Andreas

这在内部调用Double.toString()。不知道如何回答这个问题。
shmosel

23

使用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()将是最好的便捷方法。


14

这段代码可以为我编译和工作。它将使用您尝试的调用将双精度型转换为字符串。

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令我感到困惑。查看堆栈跟踪。我猜您在示例中未显示其他代码,该代码导致引发该异常。
ditkin 2011年

1
OP的代码也是如此。这里没有要解决的问题。
Brian Roach

有可能,我正在尝试在onTouchListener中执行此操作。病态发布更多代码,基本上是当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。
布兰登·威尔逊

6

该异常可能来自parseDouble()调用。检查赋予该函数的值是否确实反映了两倍。


3
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());

有用。必须重复。


3

科特林

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

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

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

此代码有效


3
Double.toString()通话String.valueOf(double)通话Double.toString(double)。疯狂吧?
corsiKa 2011年

OP的代码也是如此。这里没有要解决的问题。
Brian Roach

2
@Muhammed-可能吗?这就是它的作用
Brian Roach

2
@Muhammed好,您正在创建一个对象只是为了获取其String值。如果这是某种循环,您可能会遇到很多额外的(不必要的)开销。我不是过早优化的忠实拥护者,但我是避免明显缺陷的忠实拥护者。
corsiKa 2011年

1
@Brian okey,我了解:)谢谢。您是正确的,光辉
编码

1
double priceG = Double.parseDouble(priceGal.getText().toString());
double valG = Double.parseDouble(volGal.toString());

其中之一就是抛出异常。您需要添加一些记录/打印,看看有什么在volGalpriceGal-这是不是你的想法。


我将总数更改为像44这样的硬数字,但仍然给我一个错误。
布兰登·威尔逊

什么是“总计”?您原始的代码片段无法抛出该异常。我上面显示的两个呼叫可以。您String的之一不是的有效表示,double这就是为什么您会收到该异常的原因。
Brian Roach

要清楚;Double.toString(total); 不能抛出异常。曾经 。您将其更改为new Double(total).toString();也无法更改的内容,如果您在此处看到已被否决的答案,那您就永远不想做。
Brian Roach

好吧,请改变一下。我把那一点点的代码从ontouchlistener上移了下来,并且效果很好。但是当它在ontouchlistener中时,会引发错误。我正在尝试在onTouchListener中执行此操作。病态发布更多代码,基本上是当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。
布兰登·威尔逊

1

double.toString()应该管用。不是变量类型Double,而是变量本身double


您应该考虑到有时它会返回带有E科学符号的数字,如-2.23561E5
Augustas

0

只需使用以下内容:

doublevalue+""; 

这将适用于任何数据类型。

例:

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

7
通过添加到空String来进行字符串化的非常不好的习惯。改用专用的JDK func
StackHola 2014年

2
@ Michael.P为什么不好?
gab06 2015年

作为Java程序员,我一直都在这样做。
gab06 2015年

1
除非进行一些编译时优化,否则它将调用其他构造函数和append方法。
dsmith

1
始终使用String.valueOf(dd)代替。这也适用于任何数据类型。
BladeCoder 2015年

0

使用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());

您将获得所需的输出。


0

那你什么时候做

totalCost.setText(tot);

你只是做

totalCost.setText( "" + total );

其中“” + <变量>将自动将其转换为字符串


0

完整信息

您可以将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);

0

有三种将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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.