我有一个奇怪的问题,就是必须将双数的精度限制为多个小数位,或者根本没有小数位,精度是这样传递给我的:0.001,0.1,1,0.00001等
所以我可以给出,例如,1.234247324和0.001的精确指标,并且我需要返回1.234。如果相反,我的精度为1.0,那么我将返回1(没有小数位),依此类推。
我不知道该如何解决这个问题。有没有人指出如何解决这个问题?
谢谢!
答案 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。