- - PR -
固定長データの符号付数値の読み込み
1
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-09 21:58
テキストファイルに記載された固定長データを読み込む処理を作っています。
数値には+・−の符号がついてしかも「+00001000」「-00001000」という状態です。 小数点のない数値はLong型にて受け取ることになっています。 あらゆる都合により符号の排除ができず、このまま読み込むしかないのですが、 マイナスは普通に読み込めたのですが、プラスがNumberFormatExceptionとなります。 String型で取込⇒Long型変換も失敗に終わってしまいました。 いい手段はないのでしょうか。 分かりづらい文章で申し訳ございません。 | ||||||||||||||||||||
|
投稿日時: 2006-08-09 22:35
自力でStringの先頭の'+'と'-'を切り取ってから数値部分だけを
longに変換して'-'のときは-1を掛けてやればよいのでは? java.text.DecimalFormatをつかえばすんなりいくのかもしれませんね。 | ||||||||||||||||||||
|
投稿日時: 2006-08-09 22:52
どう試されたのかを書かれたほうが、良いと思います。おそらく Long.parseLong あたりを試されたのかもしれませんが、仕様をみると "+" は受け付けない、と書かれていますね。 ならば、と、
とやると、
となったので、これで成功、と思ったのですが、
とやると、
となり、失敗でした。 極限まで精度を追求することはできないみたいです。 桁数が小さくてよいなら、だいたいこれで間に合うとは思いますが。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||||||||||||||
|
投稿日時: 2006-08-10 02:21
すみません、試したことを書くべきでした。 察しの通りで、parseLongとvalueOfで試してみたのですが、よく考えると 同じことをしてました。。。。 もう少し色々試してダメならお二方のアドバイスで行ってみようと思います。 | ||||||||||||||||||||
|
投稿日時: 2006-08-10 12:17
DecimalFormatクラスのJavaDocがわかりやすくないんですよね。
| ||||||||||||||||||||
|
投稿日時: 2006-08-10 15:20
java.util.Scanner を使えば簡単にできます。
# Tiger からしか使えないのですが ^^;; | ||||||||||||||||||||
|
投稿日時: 2006-08-11 11:48
皆さん、返答有難うございます。
StringをBigDecimalで受け取ってLongに変換という下記のような方法になりました。 小数点付き数値はBigDecimalで受け取るように決まっていたらしく、使えるものは 使ってしまおうと。 public static void main(String[] args) { long l; String s = "+" + Long.MAX_VALUE; String s2 = "-" + Long.MAX_VALUE; BigDecimal bd; try{ bd = new BigDecimal(s); l = bd.longValue(); System.out.println("S =:" + s); System.out.println("S→long =:" + l); bd = new BigDecimal(s2); l = bd.longValue(); System.out.println("S2 =:" + s2); System.out.println("S2→long=:" + l); }catch(NumberFormatException e){ System.err.println("---------------------------------------------"); e.printStackTrace(); System.err.println("---------------------------------------------"); } } (納期まで決められていたのに新人用のサンプルコードだとは思わなかった・・・ 仕様が口頭で伝えられ、しかも大雑把過ぎたのはそのせいか・・・) |
1