间隔中的圆数加倍,按步骤定义

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 在第三种情况下

Ḿűỻ*_*ṩ ᛗ 5

Java具有可以将数字舍入到n个小数位的工具,请参阅如何将数字舍入到Java中的n个小数位.要舍入到您指定的任何间隔,您可能必须手动使用Math.round.

式:

给定一个间隔rx圆值的双值,一个简单的公式是:

  • 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.