Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么使用double而不是integer?_Java_Rounding - Fatal编程技术网

Java 为什么使用double而不是integer?

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.

第一件事:我来自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.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的第一步。从昨天开始。好吧,这是错误的,但问题和答案是我一直在寻找的。谢谢你,艾伦!