float 値を小数点以下 3 桁まで下げようとしています。たとえば、値 2.56976 は 2.570 ではなく 2.569 になります。私は次のような答えを検索して見つけました:
そのような答えは正確ではありません。たとえば、コード:
double value = (double)((unsigned int)(value * (double)placed)) / (double)placed
を返すことができますがvalue - 1
、これは正しくありません。value と place を乗算すると、value * (double)placed)
2100.999999996 のようになります。unsigned int に変更すると、間違った 2100 になります (正しい値は 2101 のはずです)。他の回答にも同じ問題があります。Java では、BigDecimal
すべてのハッセルを保存する which を使用できます。
(注: もちろん、2100.9999 を四捨五入することはオプションではありません。これは、「小数点以下 3 桁を正しく」というフローリングのアイデア全体を台無しにするためです)