gpt4 book ai didi

java - 将double舍入到区间内的数字,逐步定义

转载 作者:搜寻专家 更新时间:2023-10-31 19:52:01 25 4
gpt4 key购买 nike

我有一些抽象的双区间,由步骤 f.e. 定义:

0.0、0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1.0 - 其中间隔 == 0.1

0.0, 0.25, 0.5, 0.75, 1.0 - 其中间隔 == 0.25

0.0, 0.5, 1.0 - 其中间隔 == 0.5

Java 是否有某种工具可以根据时间间隔将一些双数“四舍五入”到最接近的数字? f.e:

0.511111 - 0.5 第一种情况

0.599999 - 到 0.6 第一种情况

0.511111 - 0.5 在第二种情况下

0.599999 - 0.5 在第二种情况下

0.711111 - 0.75 在第二种情况下

0.744444 - 到 0.5 第三种情况

0.755555 - 到 1.0 第三种情况

0.92222 - 到 1.0 第三种情况

最佳答案

Java 有可以将数字四舍五入到 n 位小数的工具,参见 How to round a number to n decimal places in Java .要舍入到您指定的任何间隔,您可能必须手动使用 Math.round

公式:

给定一个区间 r 和一个 double 值 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

证明:

  • 区间r可以被认为是小数单位的值。
    • r = 0.25时,小数单位为四分之一。
  • x/r 表示组成x 的小数单位的数量。
    • x = 0.75时,r = 0.25x/r == 3,因为x包含三个小数单位,也就是四分之一。 x/r代表季度数。
  • Math.round(x)x 舍入为最接近的整数值。同样,Math.round(x/r)x/r 舍入到该分数的最接近整数倍。
    • 对于 x = 0.7, r = 0.25,我们有 x/r = 2.8,代表 2.8 个季度。 Math.round(x/r) 因此将值四舍五入到最接近的四分之一,即 3 个季度。
  • Math.round(x/r)*r 因此将 x 舍入到最接近的小数区间 r。需要乘数是因为 r 是每个小数单位的值。
    • 对于 x = 0.7, r = 0.25Math.round(x/r) 代表 3 个季度。它必须乘以 r=0.25 才能得到 x 的舍入值。

关于java - 将double舍入到区间内的数字,逐步定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com