- PR -

入力チェックについて

1
投稿者投稿内容
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-10-18 09:06
こんにちは。

データベースにアクセスする簡単なWebアプリケーションの作成に
挑戦しています。
その時の入力チェックについてご質問させてください。

ブラウザでテキストフィールドに入力した数値データ(小数を含む、1234.567など)を
DBテーブルの数値型(OracleのNumber(7, 2))に格納するとします。
この時、
(1)桁あふれが起きないように事前に入力チェックをするには
どうしたらよいのでしょうか。
次のような感じでよろしいのでしょうか。
コード:
String amountString = request.getParameter("amount");
try {
	double amount = Double.parseDouble(amountString);
	if (amount >= 100000) {
		System.out.println("入力チェックエラーです。");
	} else {
		System.out.println("妥当なデータです。");
	}
} catch (NumberFormatException e) {
	System.out.println("入力チェックエラーです。");
}



(2)ブラウザで12.345のようなデータを入力した場合、
Number(7, 2)型の列に設定しようとすると四捨五入が発生しますが、
丸め誤差が発生するかどうかを調べるにはどうしたらよろしいでしょうか。
※どのようにしたらよいかアイデアが浮かびませんでした。。。

よろしくお願いします。
begood
ベテラン
会議室デビュー日: 2003/09/12
投稿数: 97
お住まい・勤務地: とうきょー
投稿日時: 2003-10-18 13:02
私なら、StringTokenizerで、少数点を検地してあげて、カウンタを回してあげて、小数点以下がどの程度あるのか(整数部分もカウントできますけど・・・)、四捨五入なら、そのつど、適切に処置したりとかしますかね。あとはjava.util.regexの中の、PatternとMatcherで小数点を検地する方法なんかもありますけど、使い慣れたStringTokenizerの方が私は好きです。
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-10-18 13:41
こんにちわ。

begoodさん、返信ありがとうございます。

引用:

begoodさんの書き込み (2003-10-18 13:02) より:
私なら、StringTokenizerで、少数点を検地してあげて、カウンタを回してあげて、小数点以下がどの程度あるのか(整数部分もカウントできますけど・・・)、四捨五入なら、そのつど、適切に処置したりとかしますかね。あとはjava.util.regexの中の、PatternとMatcherで小数点を検地する方法なんかもありますけど、使い慣れたStringTokenizerの方が私は好きです。



なるほど!
Number(7,2)などの型情報を元に正規表現を作り、
ブラウザから送られたデータとのマッチングをチェックすれば、
桁あふれ、丸め誤差発生の検知、数値文字列かどうかの判定など
簡単にできますね。
また、データベースのスキーマ情報を表現するファイルを
作成し、そのファイルをもとに入力チェックするような
クラスを作れば、テーブルのカラムの型やサイズが変わっても、
プログラムを修正しなくてもすむようにできそうですね。

ちょっと挑戦してみようと思います。
ありがとうございました。
カヌー
会議室デビュー日: 2003/01/14
投稿数: 19
投稿日時: 2003-10-20 11:05
小数点以下の四捨五入はBigDecimalを使えば簡単にできます。

BigDecimal bd = new BigDecimal(request.getParameter("amount"));
BigDecimal newBd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);

たぶんこんな感じです。
詳しくはAPIドキュメントをご確認ください。
eiji
常連さん
会議室デビュー日: 2003/07/23
投稿数: 32
投稿日時: 2003-10-20 11:34
double型は、丸めの誤差が生じるので、
金額計算等を行う項目は、BigDecimal型で保持するのがよいと思います。
四捨五入や、切捨て、切り上げの処理は、カヌーさんの言うとおりです。
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-10-20 12:48
こんにちは。
カヌーさん、eijiさん

おっしゃるとおりですね。
ありがとうございました。
1

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