我知道有很多问题要求这样做,但我已经尝试了很多解决方案,但没有一个能够满足我的需求!精确地将浮点数/小数点精确到小数点后3位?
大多数解决方案的工作,但在我的测试数据我有float
:0.08095238095238096
如果我这一轮以4我似乎得到; 0.081
当我需要0.0809
并没有收拾最后的地方。
也是我最好使用浮点数或双数这种类型的数字?
感谢
我知道有很多问题要求这样做,但我已经尝试了很多解决方案,但没有一个能够满足我的需求!精确地将浮点数/小数点精确到小数点后3位?
大多数解决方案的工作,但在我的测试数据我有float
:0.08095238095238096
如果我这一轮以4我似乎得到; 0.081
当我需要0.0809
并没有收拾最后的地方。
也是我最好使用浮点数或双数这种类型的数字?
感谢
你似乎要向下舍到小数点后四位,而不是四舍五入半升。
double d = 0.08095238095238096;
d = (long) (d * 10000)/10000.0;
或
d = Math.floor(d * 10000)/10000.0;
我假定你的意思是你想的0.809 d = 0.0809代替。
也许你正在考虑3位有效数字,这是一个更难的问题。
最好使用double
或BigDecimal
而不是float
除非你有很好的理由。
顺便说一句:清楚地知道你想要什么是很有用的,否则它很难找到它。 ;)
你的问题是你的原始编号是错误的。如果您需要获得0.809
,您需要从0.8095238095238096
开始(并非如您所知的0.08095238095238096
)。
也许这是一条评论,而不是一个答案。 ;) –
说实话,我认为嘲笑是这个问题最不值得的,如果他甚至不能花时间确定他问题的最简单部分是正确的,尤其是当像你这样的人花时间给出一个好的想法回答。 – Bohemian
对OP的要求并不清楚,为什么我怀疑他在寻找解决方案时遇到了很多麻烦。 –
可能出现[将小数点后两位有效数字舍入到一个整数](http://stackoverflow.com/questions/2808535/round-a-double-to-2-significant-figures-after-decimal-point ) – tchrist