- PR -

CSVデータ取込時のNumberFormatExceptionについて

投稿者投稿内容
未記入
会議室デビュー日: 2005/07/15
投稿数: 2
投稿日時: 2005-07-15 08:09
CSVデータ(String)を取り込んで、""と,を外し、double型に変換して加算を行う処理を作成しているのですが、次のエラーに遭遇してしまいました。

NumberFormatException for input string:"1.000"
java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1036)
java.lang.Double.valueOf(Double.java:168)

型変換/加算は次のように行なっております。

double dNum[n] += Double.valueOf( str.replaceAll("\"","").trim()).doubleValue();

CSVデータには、小数点以下3桁まで持っているものもあり、その小数点以下の数値も省略せずに計算できるようにしなければならないのですが…。
どうかお知恵を借して下さい。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-07-15 08:47
よくわかりませんが、文字列に引用符が付いていると言うこ
とはありませんか?
MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-07-15 08:54
引用:

CSVデータ(String)を取り込んで、「""と,を外し」


引用:

double dNum[n] += Double.valueOf( str.replaceAll("\"","").trim()).doubleValue();


↑の記述だけではダブルコーテーションしか消えませんが…。
カンマが残っていてエラーになっているだけは無いですか?

ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2005-07-15 10:21
引用:

未記入さんの書き込み (2005-07-15 08:09) より:
double dNum[n] += Double.valueOf( str.replaceAll(""","").trim()).doubleValue();



解決法ではないのですが・・・
parseDoubleを使うともっとスッキリ書けます

Double.parseDouble( str.replaceAll("\"","").trim())
未記入
会議室デビュー日: 2005/07/15
投稿数: 2
投稿日時: 2005-07-15 10:29
レスありがとうございます。

Kissingerさん>引用符はついていないです。

MARUさん>すみません、カンマは前の方の処理で外しています。

ひらさん>うおっ、ありがとうございます。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-07-15 10:47
NumberFormatException for input string:"1.000"

トレース情報の中の1.000が引用符でかこわれているのが
気になりますね。
MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-07-15 10:50
問題が曖昧なのでこれ以上は答えられないと思います。

・変換出来ないと分かっている文字列の条件はなんですか?
 「小数点以下3桁まで持っているものもあり」の件から、その辺が問題なのでしょうが。。
・問題が発生しているJavaの環境は?

ちなみに
JDK1.4.1で確認したところ"1.000"は問題なくdoubleに変換できました。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-07-15 11:56
そのコードで問題なさそうに見えますね。replaceAll("\"", "") でちゃんと引用符は消えますし、NumberFormatExceptionのメッセージは入力文字列を""で囲って表示するようです。

まずは、Double.valueOf() の入力になっている文字列の中身をcharAt()で眺めてみるとか。

スキルアップ/キャリアアップ(JOB@IT)