[英]Why use double instead of integer?
首先,第一件事:我来自php,想用java拓宽视野! 所以我看了一些书。 我看到四舍五入的数字是可能的Math.round()。
我的问题如下:如果我想将数字四舍五入为小数,必须使用以下代码:
double number;
number = 1.111222;
number = Math.round(number*100.0) / 100.0;
或number = (digit) Math.round(number*100) / 100;
但是为什么
number = Math.round(number*100) / 100;
没有做完全相同的事情???
提前谢谢
渣
如果假设您要为该逗号1.111222
小数点1.111222
问题是100
会将值100.0
转换为long
值,而100.0
会将值100.0
转换为double
。 long
不能带小数,而double
可以带小数。
看看这两种情况:
情况1产生一个double
:
Math.round(1.111222*100.0) => Math.round(111.222) => 111
111/100.0 => 1.11
情况2产生一个
int
long
:
(我原本以为int
但被输出证明是错误的,原因是Math.round(double)
返回此处找到的long
)
Math.round(1.111222*100) => Math.round(111) => 111
111/100 => 1 //truncated due to being a long
您可以通过运行以下代码来查看此内容:
public static void main (String[] args)
{
double number = 1.111222;
System.out.println(Math.round(number*100.0)/100.0);
System.out.println(Math.round(number*100)/100);
Object a = Math.round(number*100.0)/100.0;
Object b = Math.round(number*100)/100;
System.out.println(a.getClass().getName());
System.out.println(b.getClass().getName());
}
哪些打印:
1.11
1
java.lang.Double
java.lang.Long
因为Math.round
返回long
。 因此,舍入( long
类型)的结果除以一个int
。 在除法之前,JVM将两者都转换为long
。 有关Java 扩展转换规则,请参见此处。
在javadoc中很明显。
Returns the closest {@code int} to the argument, with ties rounding up.
因此round(float)
返回int
, round(double)
返回long
。
当您调用Math.round()时,结果是一个整数值。 当您将两个整数相除(例如/ 100)时,Java将执行整数除法,丢弃结果的小数部分。
当您将整数除以双精度数(例如/ 100.0)时,Java将首先将整数转换为双精度值,然后执行浮点除法,保留小数部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.