如何将double的精度限制为0.00 ... 1形式的精度?

时间:2018-01-08 18:59:48

标签: java math precision arithmetic-expressions rounding

我有一个奇怪的问题,就是必须将双数的精度限制为多个小数位,或者根本没有小数位,精度是这样传递给我的:0.001,0.1,1,0.00001等

所以我可以给出,例如,1.234247324和0.001的精确指标,并且我需要返回1.234。如果相反,我的精度为1.0,那么我将返回1(没有小数位),依此类推。

我不知道该如何解决这个问题。有没有人指出如何解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:1)

从您的值开始,然后创建一个BigDecimal,然后四舍五入到您想要的值。

double value = 1.23456; //not actually equal to that, but pretend.
BigDecimal better = new BigDecimal(value);
BigDecimal rounded = better.round(new MathContext(3));

圆角现在是您想要的实际值。你能用精密指示器做什么?

BigDecimal precision = new BigDecimal("0.001");

现在您可以获得精度的比例,您可以将其用于舍入。

System.out.println(precision.scale());
//outputs 3.

这与使用对数类似。

答案 1 :(得分:0)

使用其他两个答案的混合方法可以指定0.25之类的异常精度:

BigDecimal rounded = (x / precision).round(new MathContext(0)) * precision;

答案 2 :(得分:-1)

试试此代码

double x = 1.234247324;
double p = 0.001;
double y = (int)(x * 1 / p) / (1 / p);

不要真正理解你想做什么,但结果是1.234。