質問するログイン新規登録

回答編集履歴

2

補足

2021/07/22 23:34

投稿

otn
otn

スコア86367

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

1

補足

2021/07/22 23:34

投稿

otn
otn

スコア86367

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