Javaで文字列をdoubleに変換する


回答:


471

Double.parseDouble()をに変換するStringために使用できますdouble

String text = "12.34"; // example String
double value = Double.parseDouble(text);

あなたの場合、あなたが望むように見えます:

double total = Double.parseDouble(jlbTotal.getText());
double price = Double.parseDouble(jlbPrice.getText());

だから私のコーディングはdouble total = Double.parseDouble(string);?
TinyBelly

4
@TinyBelly:ええ、あなたが望むように見えます:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34

1
@TinyBelly:doubleについて解析する文字列からテキストの一部を抽出する必要があります。これがあなたの場合のためにあなたがそれをすることができる1つの方法です、しかし私がそれがすべてのために働くことを保証することはできません:double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));-これは基本的に数字ではないかゼロになっているすべての文字を置き換え.、解析される数字と小数点だけを残します。
WhiteFang34

4
価格計算にdoubleを使用することはお勧めできません。
Bozho

2
Doubleプリミティブ型の代わりにクラスの結果を検索するときにここに誘惑された人のためにdouble使用しますDouble.valueOf(String)
Pshemo

48

文字列を10進数値に解析する際に問題が発生した場合は、数値の「、」を「。」に置き換える必要があります。


String number = "123,321";
double value = Double.parseDouble( number.replace(",",".") );

2
別のオプション:DecimalFormat df = new DecimalFormat(); DecimalFormatSymbols sfs = new DecimalFormatSymbols(); sfs.setDecimalSeparator( '、'); df.setDecimalFormatSymbols(sfs); df.parse(数値);
Robertiano、2014

37

文字列をdoubleに戻すには、以下を試してください

String s = "10.1";
Double d = Double.parseDouble(s);

parseDoubleメソッドは望ましい効果を実現し、Double.valueOf()メソッドも実現します。


2
いいえ、String.valueOf(something)は何かのString表現を返します:何かが組み込み型である場合、またはそれがObjectでnullの場合、それ以外の場合はsomeObject.toString()と同等です。文字列からDoubleを取得するには、他の回答に示されているように逆の方法で行う必要があります(Double.valueOf(someString)はDoubleを返し、Double.parseDouble(someString)はdoubleを返します)。
Johann Petrak 2015

36
double d = Double.parseDouble(aString);

これにより、文字列aStringがdouble dに変換されます。


aStringは何を参照していますか?もっと説明してもらえますか?
TinyBelly

2
aStringは単なる文字列です。より具体的には、数値に変換する文字列。
Andreas Vinter-Hviid

30

を使用しnew BigDecimal(string)ます。これにより、後で適切に計算されることが保証されます。

経験則として-常にBigDecimalお金のような機密性の高い計算に使用します。

例:

String doubleAsString = "23.23";
BigDecimal price = new BigDecimal(doubleAsString);
BigDecimal total = price.plus(anotherPrice);

20

Doubleを使用して文字列値を解析するだけです

String someValue= "52.23";
Double doubleVal = Double.parseDouble(someValue);
System.out.println(doubleVal);

14

上記のロバーティアーノからの引用を引用します。これは、最も用途が広くローカリゼーションに対応したバージョンであるためです。それは完全な投稿に値します!

別のオプション:

DecimalFormat df = new DecimalFormat(); 
DecimalFormatSymbols sfs = new DecimalFormatSymbols();
sfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(sfs);
double d = df.parse(number).doubleValue();



3

これは私がすることです

    public static double convertToDouble(String temp){
       String a = temp;
       //replace all commas if present with no comma
       String s = a.replaceAll(",","").trim(); 
      // if there are any empty spaces also take it out.          
      String f = s.replaceAll(" ", ""); 
      //now convert the string to double
      double result = Double.parseDouble(f); 
    return result; // return the result
}

たとえば、文字列「4 55,63。0」を入力すると、出力は2倍の数値45563.0になります


2

Double.parseDouble()囲みtry/catchブロックなしで使用するとNumberFormatException、入力の二重文字列が有効な形式に適合しない可能性があります。

Guavaはこのためのユーティリティメソッドを提供します。このメソッドはnull、文字列を解析できない場合に戻ります。

https://google.github.io/guava/releases/19.0/api/docs/com/google/common/primitives/Doubles.html#tryParse(java.lang.String)

Double valueDouble = Doubles.tryParse(aPotentiallyCorruptedDoubleString);

実行時に、不正な形式の文字列入力がnull割り当てられますvalueDouble


「文字列を解析できない場合に0.0を返します」 -Javadocはその主張をサポートしていません。
トム・

@Tom 0.0のdouble型に変換できるnull値のDouble型を返します– DYS 13秒前の編集
DYS

1
できますが、自動的にはできず、スニペットはそれを実行できません。
トム・

1

これを使用して、intがデータ型をnumおよびnum2からintに変換する必要がある場合に、任意のString数値をdoubleに変換します。Eng: "Bader Qandeel"を使用して、任意の文字列doubleのすべてのケースを取った

public static double str2doubel(String str) {
    double num = 0;
    double num2 = 0;
    int idForDot = str.indexOf('.');
    boolean isNeg = false;
    String st;
    int start = 0;
    int end = str.length();

    if (idForDot != -1) {
        st = str.substring(0, idForDot);
        for (int i = str.length() - 1; i >= idForDot + 1; i--) {
            num2 = (num2 + str.charAt(i) - '0') / 10;
        }
    } else {
        st = str;
    }

    if (st.charAt(0) == '-') {
        isNeg = true;
        start++;
    } else if (st.charAt(0) == '+') {
        start++;
    }

    for (int i = start; i < st.length(); i++) {
        if (st.charAt(i) == ',') {
            continue;
        }
        num *= 10;
        num += st.charAt(i) - '0';
    }

    num = num + num2;
    if (isNeg) {
        num = -1 * num;
    }
    return num;
}


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