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

How to cap a double's precision to a precision given in the form of 0.00...1?

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

因此,例如,我可以得到 1.234247324 和精度指标 0.001,因此我需要 return 1.234。相反,如果我得到的精度是 1.0,那么我会 return 1(没有小数位),依此类推。

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

谢谢!

试试这个代码

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

不太明白你想做什么,但结果是 1.234。

从您的值开始,创建一个 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.

这类似于使用对数。

使用其他两个答案的混合方法允许指定不寻常的精度,如 0.25

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