如何在没有 Math#round 的情况下进行舍入?
How to round without Math#round?
因此,只需执行以下操作即可轻松进入十分之一的位置:
int y;
double x = 2.5;
y = (int) (x+.5);
但是如果不使用 Math.round()
,您将如何四舍五入到百分之一甚至千位?
您可以将原始数字乘以 10 的次方,以便所需舍入的位置位于单位位置,应用您已有的 "add half and round" 方法,然后除以相同的 10 次方,因此结果数字现在恢复到原来的比例。
百分之一:
- 声明
y
为 double
。这样一来,将 2.125
四舍五入到百分之一的位置将导致 2.13
,而不是 2
。
- 将
x
值乘以 100.0
。
- 添加
0.5
.
- 转换为
int
。 (或 long
更精确。)
- 除以
100.0
。
示例:将 2.125
四舍五入到百分之一的位置。
1. 2.125 * 100.0 是 212.5
。
2. 212.5 + 0.5 是 213.0
。
3. 213.0
转换为 int
是 213
。
4. 213
除以 100.0
得到 2.13
.
对于千分之一,程序是相同的,只是将100.0
替换为1000.0
。
由于double
浮点类型的精度有限,上述方法容易出现浮点错误。
您还可以将您的值转换为 BigDecimal
。然后你可以使用 BigDecimal
's round
method. It takes a MathContext
,它允许你直接舍入到所需的精度。
public class 十进制 {
public static void main(String[] args) {
double xd = 2.125;
double mult = xd * 100.0;
double add = mult + 0.5;
int reuslts = (int) add;
double result = reuslts / 100.0;
System.out.println(result);// 2.13
}
}
因此,只需执行以下操作即可轻松进入十分之一的位置:
int y;
double x = 2.5;
y = (int) (x+.5);
但是如果不使用 Math.round()
,您将如何四舍五入到百分之一甚至千位?
您可以将原始数字乘以 10 的次方,以便所需舍入的位置位于单位位置,应用您已有的 "add half and round" 方法,然后除以相同的 10 次方,因此结果数字现在恢复到原来的比例。
百分之一:
- 声明
y
为double
。这样一来,将2.125
四舍五入到百分之一的位置将导致2.13
,而不是2
。 - 将
x
值乘以100.0
。 - 添加
0.5
. - 转换为
int
。 (或long
更精确。) - 除以
100.0
。
示例:将 2.125
四舍五入到百分之一的位置。
1. 2.125 * 100.0 是 212.5
。
2. 212.5 + 0.5 是 213.0
。
3. 213.0
转换为 int
是 213
。
4. 213
除以 100.0
得到 2.13
.
对于千分之一,程序是相同的,只是将100.0
替换为1000.0
。
由于double
浮点类型的精度有限,上述方法容易出现浮点错误。
您还可以将您的值转换为 BigDecimal
。然后你可以使用 BigDecimal
's round
method. It takes a MathContext
,它允许你直接舍入到所需的精度。
public class 十进制 {
public static void main(String[] args) {
double xd = 2.125;
double mult = xd * 100.0;
double add = mult + 0.5;
int reuslts = (int) add;
double result = reuslts / 100.0;
System.out.println(result);// 2.13
}
}