doubleを文字列に変換する


202

それが私かどうかはわかりませんが、doubleを文字列に変換するときに問題が発生しています。

これが私のコードです:

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

1
Double.toString(double)はNumberFormatExceptionをスローすることさえできません-例外がどこか他の場所からスローされていないのですか?
Random832

1
他に何かがあるはずですが、これはうまくいくはずです。ideone.com/btGrv
ケビン

1
表示スタックトレース全体のコード
Bozho

回答:


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

これはdoubleをStringに変換します


22
合計= 1234567890123456は、[文字列はあなたが望むものを非常に頻繁ではありません「1.234567890123456E15」になると心の中で、以下の持っている
user1735824

6
上記のいずれかの解決策はありますか?
Prashanth Debbadwar 2017

6
@PrashanthDebbadwarはい:NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);次に使用total2 = fmt.format(total)
Andreas

これは内部的にを呼び出しますDouble.toString()。それが質問にどのように答えるかはわかりません。
shmosel

24

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

このコードはコンパイルして機能します。試行した呼び出しを使用して、doubleを文字列に変換します。

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のコードも同様です。解決すべき問題はここにはありません。
ブライアンローチ

可能な場合、私はこれをonTouchListenerで実行しようとしています。基本的にユーザーがエディットテキストボックスに触れたときに、より多くのコードを投稿します。エディットテキストボックスの塗りつぶしを計算するための情報が必要です。
Brandon Wilson

6

例外は、おそらくparseDouble()の呼び出しによるものです。その関数に与えられた値が本当にdoubleを反映していることを確認してください。


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のコードも同様です。解決すべき問題はここにはありません。
ブライアンローチ

2
@Muhammed-可能ですか?それはそれがすることです
ブライアンローチ

2
@Muhammedよく、あなたはその文字列値を取得するためだけにオブジェクトを作成しています。これが何らかのループにある場合、追加の(不要な)オーバーヘッドが大量に発生する可能性があります。私は時期尚早の最適化の大ファンではありませんが、明らかな欠陥を回避するのが好きです。
corsiKa

1
@ブライアンオーケー私は理解します:)ありがとう。あなたの言う通り、グローコーダーもそうです
オリャンレン

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

それらの1つは例外をスローしています。あなたには何があるか確認するために、印刷/いくつかのログを追加する必要があるvolGalpriceGal-それはあなたが考えるものではありません。


合計を44などのハード数値に変更しましたが、それでもエラーが発生しました。
Brandon Wilson

「合計」って何?元のコードスニペットはその例外をスローできませんでした。上記で示した2つの呼び出しは可能です。の1 Stringつがの有効な表現ではないため、doubleその例外が発生します。
ブライアンローチ

明確にするために; Double.toString(total); 例外をスローすることはできません。ずっと。。あなたはそれを変更するnew Double(total).toString();こともできないように変更しました。投票結果がここに表示された場合、それはあなたがやりたいことではありません。
ブライアンローチ

わかりました、変更しました。その少しのコードをontouchlistenerから移動したところ、問題なく動作しました。しかし、それがontouchlistenerにある場合、エラーをスローします。これをonTouchListenerで実行しようとしています。基本的にユーザーがエディットテキストボックスに触れたときに、より多くのコードを投稿します。エディットテキストボックスの塗りつぶしを計算するための情報が必要です。
Brandon Wilson


0

以下を使用してください:

doublevalue+""; 

これはどのデータ型でも機能します。

例:

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

7
空の文字列に追加して文字列化するのは非常に悪い習慣です。代わりに専用のJDK funcを使用してください
StackHola 2014年

2
@ Michael.Pなぜそれが悪いのですか?
gab06

私はこれをJavaプログラマーとしてずっとずっとずっと続けています。
gab06 2015年

1
実際のコンパイル時の最適化がない限り、追加のコンストラクターと追加メソッドが呼び出されます。
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に変換する方法は3つあります。

  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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.