form.setAaa
メソッドに渡したBigDecimal
インスタンスのtoString
メソッドが暗黙的に呼び出されているのでしょう.
1e-8
は数値0.00000001
の浮動小数点形式での記法で, 結局は同じ値を表していますからinput
要素にtype="number"
を指定していることから実用上の問題は発生しないと思われます.
とは言え, これが看過できないのであれば, 事前にBigDecimal
の値を目的の形式の文字列(BigDecimal.toPlainString
を使う?)としてからform.setAaa
に渡せばよいでしょう.
NOTE:
なおその方法については別途お調べ下さい.(回答者はほとんどJavaを忘れています)
追記
この後いろいろと調べてみた結果, Choromeでは小数点下の桁数が6桁を超える(つまり7桁以上)とinput[type="number"]
要素の表示内容が強制的に浮動小数点形式になってしまうようです.
従ってJSP側で0.00000001
と出力しようが結局WEBブラウザ側で1e-8
形式に変換してしまうため, クライアントサイドでのスクリプトで対処する他ありません.
そこで次のような回避スクリプトを作ってみました.
(とは言え、問題が完全に解決するわけではありません)
JavaScript
1//※事前に読み込んでおく
2//input[type="number"]要素の表記を修正する
3function fixNum(input){
4 const value = input.valueAsNumber;
5 const numstr = value.toFixed(16);
6 if(numstr.match(/./) && value != 0){
7 input.value = numstr.replace(/0+$/, "");
8 console.log(value == input.valueAsNumber);//値に変化がないことを確認
9 }
10}
HTML
1<!--問題を引き起こしているinput(form:input)要素の直後に下記のようなscript要素を記述しておく-->
2<input type="number" value="1e-7" autocomplete="off" step="1e-7"/>
3<script>
4{
5 const input = document.currentScript.previousElementSibling;
6 input.addEventListener("change", e => fixNum(input));
7 fixNum(input);
8}
9</script>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/04 08:19
2018/04/04 08:35
退会済みユーザー
2018/04/04 08:37
2018/04/04 08:42
2018/04/04 08:49
退会済みユーザー
2018/04/04 08:54
退会済みユーザー
2018/04/04 08:55
2018/04/04 09:05
退会済みユーザー
2018/04/04 09:06
2018/04/04 09:14