2016-07-07 34 views
-1

原始类型的转换最常用于将浮点值转换为整数。当我们这样做时,浮点值的小数部分被简单地截断。为什么?为什么铸造原始数据类型会截断浮点值?

public class Chaz { 
      public static void main(String[] args) { 
      double x = 1234.5678; 
      long g = (long)x; 
      System.out.println(g); 
    } 
} 
+0

因为long是整数,所以它不能保持浮点数 –

+4

你究竟在问什么?你在问为什么长不能有小数部分?或者你问为什么它总是被截断(=四舍五入),而不是四舍五入,四舍五入或更高,或者在必须轮回时抛出异常? –

回答

2

从文档,

长数据类型是一个64位的二的补码整数。有符号的 长的最小值为-2^63,最大值为2^63-1

它不存储小数精度值。请参阅here

0

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是真正的价值。或者如果需要最近的整数,可以将其舍入。没有额外的信息我们就无法分辨,但我们实际上可以告诉的是,这是一种正常和预期的行为。