将float / decimal舍入到3位小数?

时间:2011-11-11 11:56:56

标签: java math rounding precision

我知道有很多问题需要这个,但我已经尝试了很多解决方案,但似乎没有一个工作正是我需要它!

大多数解决方案都有效,但在我的测试数据中,我有float0.08095238095238096

如果我将这个四舍五入到4,我似乎得到了; 0.081当我需要0.0809而不是最后一个地方时。{/ p>

对于这种类型的数字,我最好使用float还是double?

由于

2 个答案:

答案 0 :(得分:7)

您似乎想要向下舍入到四位小数而不是四舍五入。

double d = 0.08095238095238096;
d = (long) (d * 10000) / 10000.0;

d = Math.floor(d * 10000) / 10000.0;

我认为你的意思是你想要d = 0.0809而不是0.809。

也许您正在考虑3个有效数字,这是一个更难的问题。

最好使用doubleBigDecimal代替float,除非您有充分的理由。

顺便说一句:了解你想要的东西是有用的,否则它会更难找到它。 ;)

答案 1 :(得分:0)

您的问题是您的原始号码是错误的。如果您需要0.809,则需要从0.8095238095238096开始(而不是0.08095238095238096)。