文字列を double に変換しようとしています。しかし、数値形式の例外が発生しています。例外を与えるコードは次のようになります。
double B = Double.parseDouble(s);
サーバーからアプリケーションに s 値を取得します。そして、それはこのようなものです:
fd485b154a0427fa75c0428cdafac71f
解決策はありますか?
文字列を double に変換しようとしています。しかし、数値形式の例外が発生しています。例外を与えるコードは次のようになります。
double B = Double.parseDouble(s);
サーバーからアプリケーションに s 値を取得します。そして、それはこのようなものです:
fd485b154a0427fa75c0428cdafac71f
解決策はありますか?
1. NumbersでDouble.parseDouble()
のみ機能し、 では機能しません。Double
non-Numbers
2. 番号fd485b154a0427fa75c0428cdafac71f
はありません......
これを試してください: (文字列は 0-9 & af の HEX coz であると想定しています)
double doubleVal = new BigInteger("fd485b154a0427fa75c0428cdafac71f", 16).longValue();
long longVal = new BigInteger("fd485b154a0427fa75c0428cdafac71f", 16).longValue();
System.out.println(doubleVal);
System.out.println(longVal);
これは与える:
8.4848548707027374E18
8484854870702737183
Double.parseDouble(s)
の場合s
は問題なく動作しています。どうやら、16進数で数値を受け取っているようです。右?
次のように簡単です。
double doubleAsLongReverse = new BigInteger(doubleAsString, 16).longValue();
私は使うだろう
double doubleVal = new BigInteger("fd485b154a0427fa75c0428cdafac71f", 16).doubleValue();
System.out.println(doubleVal);
プリント
3.366703756933705E38
.longValue()を使用すると、オーバーフローのために数値の先頭を切り落とすことになります。
Hex
Apache の Commons Codec で使用します。
ByteBuffer クラスを使用できますhttp://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html 文字列 s.getBytes() からバイトを配置してから getDouble() を呼び出すことができます
それが役に立てば幸い。
double B = Double.parseDouble(s);
これは、そのような fd485b154a0427fa75c0428cdafac71f 値の例ではなく、数値に対してのみ機能します
String s = "123";
double B = Double.parseDouble(s);
System.out.println(B);