Chu*_*atz 5 java double rounding
我有一些抽象的双重间隔,由步骤fe定义:
0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 - where interval == 0.1
0.0, 0.25, 0.5, 0.75, 1.0 - where interval == 0.25
0.0, 0.5, 1.0 - where interval == 0.5
Java是否有一些工具可以根据间隔"舍入"一些双倍到最接近的数字?FE:
0.511111 - to 0.5 在第一种情况下
0.599999 - to 0.6 在第一种情况下
0.511111 - to 0.5 在第二种情况下
0.599999 - to 0.5 在第二种情况下
0.711111 - to 0.75 在第二种情况下
0.744444 - to 0.5 在第三种情况下
0.755555 - to 1.0 在第三种情况下
0.92222 - to 1.0 在第三种情况下
Java具有可以将数字舍入到n个小数位的工具,请参阅如何将数字舍入到Java中的n个小数位.要舍入到您指定的任何间隔,您可能必须手动使用Math.round.
式:
给定一个间隔r和x圆值的双值,一个简单的公式是:
x_rounded = Math.round(x/r)*r;例子:
double x = 0.59999;
double r = 0.25; // Quarters
x = Math.round(x/r)*r;
System.out.println(x); // Result is 0.5
double x = 0.59999;
double r = 0.1; // Tenths
x = Math.round(x/r)*r;
System.out.println(x); // Result is approximately 0.6
double x = 0.31421;
double r = 0.125; // Eighths
x = Math.round(x/r)*r;
System.out.println(x); // Result is exactly 0.375
Run Code Online (Sandbox Code Playgroud)
证明:
r可以被认为是分数单位的值.
r = 0.25,分数单位是四分之一.x/r表示组成的小数单位数x.
x = 0.75,r = 0.25,x/r == 3,因为x包含三个小数单位,也就是四分之一.x/r代表季度的数量.Math.round(x)舍x入到最接近的整数值.类似地,Math.round(x/r)舍入x/r到该分数的最接近的整数倍.
x = 0.7, r = 0.25,我们有x/r = 2.82.8个季度.Math.round(x/r)因此将价值四舍五入到最接近的季度,即3个季度.Math.round(x/r)*r因此舍x入到最近的分数间隔r.需要乘数因为r是每个分数单位的值.
x = 0.7, r = 0.25,Math.round(x/r)代表3个季度.它必须乘以r=0.25得到舍入值x.