web-dev-qa-db-ja.com

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

カンマを含む文字列番号(例:835,111.2)をDoubleインスタンスに変換する最も簡単で正しい方法は何ですか。

ありがとう。

25
Rod

_Java.text.NumberFormat_ をご覧ください。例えば:

_import Java.text.*;
import Java.util.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        NumberFormat format = NumberFormat.getInstance(Locale.US);

        Number number = format.parse("835,111.2");
        System.out.println(number); // or use number.doubleValue()
    }
}
_

ただし、使用している数量の種類によっては、代わりにBigDecimalに解析することをお勧めします。それを行う最も簡単な方法は、おそらく次のとおりです。

_BigDecimal value = new BigDecimal(str.replace(",", ""));
_

または DecimalFormatsetParseBigDecimal(true)とともに使用します:

_DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.US);
format.setParseBigDecimal(true);
BigDecimal number = (BigDecimal) format.parse("835,111.2");
_
47
Jon Skeet

最も簡単な方法が常に最も正しいとは限りません。これが最も簡単です。

String s = "835,111.2";
// NumberFormatException possible.
Double d = Double.parseDouble(s.replaceAll(",",""));

カンマを置き換えたいと具体的に述べたので、ロケールを気にしていません。カンマを使用したロケールは3桁ごとの区切り記号であり、ピリオドは小数点記号であることをすでに理解していると思います。 (国際化の観点から)正しい動作が必要な場合は、ここでより良い答えがあります。

10
paxdiablo

Java.text.DecimalFormatを使用します。

DecimalFormatは、10進数をフォーマットするNumberFormatの具象サブクラスです。これには、西洋、アラビア語、およびインドの数字のサポートを含む、あらゆるロケールで数値を解析およびフォーマットできるように設計されたさまざまな機能があります。また、整数(123)、固定小数点数(123.4)、科学表記(1.23E4)、パーセンテージ(12%)、通貨金額($ 123)など、さまざまな種類の数値もサポートしています。これらはすべてローカライズできます。

5
skaffman

リンクは千以上の単語を言うことができます

// Format for CANADA locale
Locale locale = Locale.CANADA;
String string = NumberFormat.getNumberInstance(locale).format(-1234.56);  // -1,234.56

// Format for GERMAN locale
locale = Locale.GERMAN;
string = NumberFormat.getNumberInstance(locale).format(-1234.56);   // -1.234,56

// Format for the default locale
string = NumberFormat.getNumberInstance().format(-1234.56);


// Parse a GERMAN number
try {
    Number number = NumberFormat.getNumberInstance(locale.GERMAN).parse("-1.234,56");
    if (number instanceof Long) {
        // Long value
    } else {
        // Double value
    }
} catch (ParseException e) {
}
2
Tim Büthe
    There is small method to convert german price format
    public static BigDecimal getBigDecimalDe(String preis) throws ParseException {
        NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
        Number number = nf.parse(preis);
        return new BigDecimal(number.doubleValue());
    }
  ----------------------------------------------------------------------------  
    German format BigDecimal Preis into decimal format
  ----------------------------------------------------------------------------  
    public static String decimalFormat(BigDecimal Preis){       
        String res = "0.00";
                    if (Preis != null){                 
                        NumberFormat nf = NumberFormat.getInstance(Locale.GERMANY);
                        if (nf instanceof DecimalFormat) {                      
                             ((DecimalFormat) nf).applyPattern("###0.00");

                             }
                            res =    nf.format(Preis);                                  
                    }
            return res;

        }
---------------------------------------------------------------------------------------
/**
 * This method converts Deutsche number format into Decimal format.
 * @param Preis-String parameter.
 * @return
 */
public static BigDecimal bigDecimalFormat(String Preis){        
    //MathContext   mi = new MathContext(2);
    BigDecimal bd = new BigDecimal(0.00);
                if (!Util.isEmpty(Preis)){  
                    try {
//                      getInstance() obtains local language format
                    NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);  
                     nf.setMinimumFractionDigits(2);
                     nf.setMinimumIntegerDigits(1);
                     nf.setGroupingUsed(true);


                    Java.lang.Number    num = nf.parse(Preis);
                    double d = num.doubleValue();
                         bd = new BigDecimal(d);
                    } catch (ParseException e) {                        
                        e.printStackTrace();
                    }                       
                }else{
                     bd = new BigDecimal(0.00);
                }

                //Rounding digits 
        return bd.setScale(2, RoundingMode.HALF_UP);

    }
1