2011-11-11 150 views
1

我知道有很多问题要求这样做,但我已经尝试了很多解决方案,但没有一个能够满足我的需求!精确地将浮点数/小数点精确到小数点后3位?

大多数解决方案的工作,但在我的测试数据我有float0.08095238095238096

如果我这一轮以4我似乎得到; 0.081当我需要0.0809并没有收拾最后的地方。

也是我最好使用浮点数或双数这种类型的数字?

感谢

+1

可能出现[将小数点后两位有效数字舍入到一个整数](http://stackoverflow.com/questions/2808535/round-a-double-to-2-significant-figures-after-decimal-point ) – tchrist

回答

7

你似乎要向下舍到小数点后四位,而不是四舍五入半升。

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

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

我假定你的意思是你想的0.809 d = 0.0809代替。

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

最好使用doubleBigDecimal而不是float除非你有很好的理由。

顺便说一句:清楚地知道你想要什么是很有用的,否则它很难找到它。 ;)

0

你的问题是你的原始编号是错误的。如果您需要获得0.809,您需要从0.8095238095238096开始(并非如您所知的0.08095238095238096)。

+3

也许这是一条评论,而不是一个答案。 ;) –

+0

说实话,我认为嘲笑是这个问题最不值得的,如果他甚至不能花时间确定他问题的最简单部分是正确的,尤其是当像你这样的人花时间给出一个好的想法回答。 – Bohemian

+0

对OP的要求并不清楚,为什么我怀疑他在寻找解决方案时遇到了很多麻烦。 –

相关问题