回答編集履歴

2

補足

2021/07/22 23:34

投稿

otn
otn

スコア85901

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  案1:`float`ではなく`double`を使う。`double`だと約15桁の有効桁数があるので、かなり大丈夫です。
10
10
 
11
- 案2:小数点以下3桁までだけ考えればいいのであれば、`1000`倍して小数部をなくし、表示の時に元に戻すと、**計算途中でも小数部がゼロのままであれば**、誤差発生は最後に`1000`で割る部分だけなので、これはほとんど大丈夫です。`1000`で割らずに`1000`倍の値を文字列化してから小数点を文字列処理で挿入すると誤差はありません。(`float`型でなく`int`型を使うことも考えられます)
11
+ 案2:小数点以下3桁までだけ考えればいいのであれば、`1000`倍して小数部をなくし、表示の時に元に戻すと、**計算途中でも小数部がゼロのままであれば**、誤差発生は最後に`1000`で割る部分だけなので、これはほとんど大丈夫です。`1000`で割らずに`1000`倍の値を文字列化してから小数点を文字列処理で挿入すると誤差はありません。もちろん有効桁数の範囲を越えない場合ですが。(`float`型でなく`int`型を使うことも考えられます)
12
12
 
13
13
  案3:何らかの10進数計算ライブラリーを使う。
14
14
 

1

補足

2021/07/22 23:34

投稿

otn
otn

スコア85901

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  案1:`float`ではなく`double`を使う。`double`だと約15桁の有効桁数があるので、かなり大丈夫です。
10
10
 
11
- 案2:小数点以下3桁までだけ考えればいいのであれば、`1000`倍して小数部をなくし、表示の時に元に戻すと、これもかなり大丈夫です。`float`でなく`int`型を使うことも考えられます
11
+ 案2:小数点以下3桁までだけ考えればいいのであれば、`1000`倍して小数部をなくし、表示の時に元に戻すと、**計算途中でも小数部がゼロのままであれば**、誤差発生は最後に`1000`で割る部分だけなので、これはほとんど大丈夫です。`1000`で割らずに`1000`倍の値を文字列化してから小数点を文字列処理で挿入すると誤差はありません。(`float`でなく`int`型を使うことも考えられます
12
12
 
13
13
  案3:何らかの10進数計算ライブラリーを使う。
14
14