回答編集履歴

2

スクリプトによる対処策を追加

2018/04/04 11:35

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -11,3 +11,71 @@
11
11
  NOTE:
12
12
 
13
13
  なおその方法については別途お調べ下さい.(回答者はほとんどJavaを忘れています)
14
+
15
+
16
+
17
+ ---
18
+
19
+ 追記
20
+
21
+
22
+
23
+ この後いろいろと調べてみた結果, Choromeでは小数点下の桁数が**6桁を超える(つまり7桁以上)**と`input[type="number"]`要素の表示内容が**強制的に浮動小数点形式になってしまう**ようです.
24
+
25
+
26
+
27
+ 従ってJSP側で`0.00000001`と出力しようが結局WEBブラウザ側で`1e-8`形式に変換してしまうため, クライアントサイドでのスクリプトで対処する他ありません.
28
+
29
+
30
+
31
+ そこで次のような回避スクリプトを作ってみました.
32
+
33
+ (とは言え、問題が完全に解決するわけではありません)
34
+
35
+
36
+
37
+ ```JavaScript
38
+
39
+ //※事前に読み込んでおく
40
+
41
+ //input[type="number"]要素の表記を修正する
42
+
43
+ function fixNum(input){
44
+
45
+ const value = input.valueAsNumber;
46
+
47
+ const numstr = value.toFixed(16);
48
+
49
+ if(numstr.match(/./) && value != 0){
50
+
51
+ input.value = numstr.replace(/0+$/, "");
52
+
53
+ console.log(value == input.valueAsNumber);//値に変化がないことを確認
54
+
55
+ }
56
+
57
+ }
58
+
59
+ ```
60
+
61
+ ```HTML
62
+
63
+ <!--問題を引き起こしているinput(form:input)要素の直後に下記のようなscript要素を記述しておく-->
64
+
65
+ <input type="number" value="1e-7" autocomplete="off" step="1e-7"/>
66
+
67
+ <script>
68
+
69
+ {
70
+
71
+ const input = document.currentScript.previousElementSibling;
72
+
73
+ input.addEventListener("change", e => fixNum(input));
74
+
75
+ fixNum(input);
76
+
77
+ }
78
+
79
+ </script>
80
+
81
+ ```

1

利用すべきと思われるメソッド名を追加

2018/04/04 11:34

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- とは言え, これが看過できないのであれば, 事前に`BigDecimal`の値を目的の形式の文字列としてから`form.setAaa`に渡せばよいでしょう.
7
+ とは言え, これが看過できないのであれば, 事前に`BigDecimal`の値を目的の形式の文字列(`BigDecimal.toPlainString`を使う?)としてから`form.setAaa`に渡せばよいでしょう.
8
8
 
9
9
 
10
10