原始类型的转换最常用于将浮点值转换为整数。当我们这样做时,浮点值的小数部分被简单地截断。为什么?为什么铸造原始数据类型会截断浮点值?
public class Chaz {
public static void main(String[] args) {
double x = 1234.5678;
long g = (long)x;
System.out.println(g);
}
}
原始类型的转换最常用于将浮点值转换为整数。当我们这样做时,浮点值的小数部分被简单地截断。为什么?为什么铸造原始数据类型会截断浮点值?
public class Chaz {
public static void main(String[] args) {
double x = 1234.5678;
long g = (long)x;
System.out.println(g);
}
}
long
代表长整数。我知道问题是数据丢失,但整数不能存储非整数。
一个可以决定存储数目的乘积,像这样:
public class Chaz {
public static void main(String[] args) {
double x = 1234.5678;
long g = (long)(x * 10000);
System.out.println(g);
}
}
,然后知道g
实际上10000X是真正的价值。或者如果需要最近的整数,可以将其舍入。没有额外的信息我们就无法分辨,但我们实际上可以告诉的是,这是一种正常和预期的行为。
因为long是整数,所以它不能保持浮点数 –
你究竟在问什么?你在问为什么长不能有小数部分?或者你问为什么它总是被截断(=四舍五入),而不是四舍五入,四舍五入或更高,或者在必须轮回时抛出异常? –