Java 为什么使用double而不是integer?
第一件事:我来自php,想用java拓宽我的视野! 所以我读了一些书。我看到数学可以把数字四舍五入 我的问题如下: 如果要将数字四舍五入为十进制,则必须使用以下代码:Java 为什么使用double而不是integer?,java,rounding,Java,Rounding,第一件事:我来自php,想用java拓宽我的视野! 所以我读了一些书。我看到数学可以把数字四舍五入 我的问题如下: 如果要将数字四舍五入为十进制,则必须使用以下代码: double number; number = 1.111222; number = Math.round(number*100.0) / 100.0; public static void main (String[] args) { double number = 1.111222; System.out.
double number;
number = 1.111222;
number = Math.round(number*100.0) / 100.0;
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());
}
或
number=(数字)数学四舍五入(数字*100)/100代码>
但是为什么这样做
number = Math.round(number*100) / 100;
不会做完全相同的事情吗
Thx提前
Marc因为Math.round
返回一个long
。
因此,四舍五入(类型为long
)的结果除以int
。在除法之前,JVM将两者都转换为long
。
请参见此处了解Java。因为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
,这在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将首先将整数转换为双精度值,然后执行浮点除法,保留小数部分。调用Math.round()时,结果是一个整数值。当您将两个整数除法(例如/100)时,Java将执行整数除法,从而丢弃结果的小数部分
当您将一个整数除以一个双精度整数(例如/100.0)时,Java将首先将该整数转换为一个双精度值,然后执行浮点除法,保留小数部分。如果您想为该逗号加一个小数点1.111222
问题是100
将值转换为long
,而100.0
将值转换为double
long
不能有小数,但double
可以有小数
看看这两种情况:
案例1产生一个双:
Math.round(1.111222*100.0) => Math.round(111.222) => 111
111/100.0 => 1.11
案例2生成一个int
long
:
(我最初认为int
但输出结果证明是错误的,原因是Math.round(double)
返回long
found)
您可以通过运行以下代码看到这一点:
double number;
number = 1.111222;
number = Math.round(number*100.0) / 100.0;
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
如果假设您的意思是为逗号加一个小数点1.111222
问题是100
将值转换为long
,而100.0
将值转换为double
long
不能有小数,但double
可以有小数
看看这两种情况:
案例1产生一个双:
Math.round(1.111222*100.0) => Math.round(111.222) => 111
111/100.0 => 1.11
案例2生成一个int
long
:
(我最初认为int
但输出结果证明是错误的,原因是Math.round(double)
返回long
found)
您可以通过运行以下代码看到这一点:
double number;
number = 1.111222;
number = Math.round(number*100.0) / 100.0;
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
为什么数字1111222中有逗号?,
将无法编译。我也不知道你真正的意思是什么,因为number=Math.round(number*100.0)/100.0
和number=Math.round(number*100)/100代码>做同样的事情。最后,什么是数字?@ChetanKinger他们没有,把我的100
和100.0
分开,在一种情况下会产生一个长字符,在另一种情况下会产生一个双字符。哇,逗号是因为(我相信这就是所谓的语言环境)我来自德国。也有可能我把逗号和点弄错了。对不起!!!但问题依然存在!所以,请考虑“,”作为“.ChancEa,我从来没有努力去看OP是从哪里来的,也不知道<代码>,<代码>是<代码>德国< /代码>中的小数点。感谢你的坚忍不拔(我不是在挖苦你)为什么1111222这个数字里有个逗号?,
不会编译。我也不知道你真正的意思是什么,因为number=Math.round(number*100.0)/100.0
和number=Math.round(number*100)/100代码>做同样的事情。最后,什么是数字?@ChetanKinger他们没有,把我的100
和100.0
分开,在一种情况下会产生一个长字符,在另一种情况下会产生一个双字符。哇,逗号是因为(我相信这就是所谓的语言环境)我来自德国。也有可能我把逗号和点弄错了。对不起!!!但问题依然存在!所以,请考虑“,”作为“.ChancEa,我从来没有努力去看OP是从哪里来的,也不知道<代码>,<代码>是<代码>德国< /代码>中的小数点。感谢你的毅力(我不是在讽刺)保持冷静!我承认我把逗号弄错了。我来自德国,这是我学习java的第一步。从昨天开始。好吧,这是错误的,但问题和答案是我一直在寻找的。谢谢你,艾伦!保持冷静!我承认我把逗号弄错了。我来自德国,这是我学习java的第一步。从昨天开始。好吧,这是错误的,但问题和答案是我一直在寻找的。谢谢你,艾伦!