java 浮点数默认_java – 声明浮点数,为什么默认类型为double?

Why is the default type a double?

这是Java语言设计者最好问的问题。他们是唯一知道这个语言设计决策的真正原因的人。但我预计这个推理是以下几点:

他们需要区分两种类型的文字,因为它们实际上意味着从数学角度来看不同的值。

假设他们将“float”作为文字的默认值,请考虑这个例子

// (Hypothetical "java" code ... )

double d = 0.1;

double d2 = 0.1d;

在上文中,d和d2实际上具有不同的值。在第一种情况下,在分配点将低精度浮点值转换为较高精度的双值。但是你不能恢复不存在的精度。

我认为一种语言设计,那两种语言是合法的,意思是不同的东西就是一个BAD的想法…考虑到第一个语句的实际意义与“自然”的含义不同。

通过这样做:

double d = 0.1f;

double d2 = 0.1;

都是合法的,并且意味着不同的事情。但是在第一个声明中,程序员的意图很清楚,第二个声明是“自然”的意思是程序员得到的。在这种情况下:

float f = 0.1f;

float f2 = 0.1; // compilation error!

…编译器拾起不匹配。

I am guessing using floats is the exception and not the rule (using doubles instead) with modern hardware so at some point it would make sense to assume that the user intends 0.1f

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的 的8⼤基本数据类型 ⼤基本数据类型 Java8⼤基本数据类型 ⼤基本数据类型   byte(字节型)、short(短整型)、int (整型) 、long(长整型)   float(单精度浮点型)、double(双精度浮点型)、boolean(布尔型)、char(字符型) 整型   byte数据类型是8位, 1个字节,默认值:0,取值范围:(-128 - 127);   short数据类型是16位,两个字节,默认值:0,取值范围:(-2^15 - 2^15 -1);   int 数据类型是32位,4个字节,默认值:0,取值范围:(-2^31 - 2^31 -1)   long数据类型是64位,⼋个字节,默认值:0L,整型常量若要声明为long类型,需要在数字后加上l或L,long a = 10000L; 浮点型   float数据类型是单精度、32位浮点数默认值:0.0f,若要定义float类型的变量需要在⼩数后⾯追加f或者F,float a= 2.3f;   double数据类型是双精度、64位、符合IEEE 754标准的浮点数默认值:0.0d,double d = 2.3;   描述整数默认⽤int,描述⼩数默认double。long⼀般⽤于描述⽇期、时间、内存、⽂件⼤⼩,IO处理⼀般使⽤byte 字符型   char⼀般⽤于描述中⽂(基本忽略),取值范围:(\u0000 - \uffff) —>(0 - 65535);,字符型⽤' '表⽰;char ch = 'A',   char和int可以相互转换,char转int直接赋值,int 转char强转。 布尔型   boolean表⽰⼀位的信息,只有两个取值:true和false,默认值:false 每个数据类型对应的包装类中都有对应的SIZE属性返回位数,MIN_VALUE和MAX_VALUE返回该数据类型最⼩值和最⼤值。 public class PrimitiveTypeTest{ public static void main(String[] args){ //byte System.out.println("基本类型:byte ⼆进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte"); System.out.println("最⼩值:Byte.MIN_VALUE = " + Byte.MIN_VALUE); System.out.println("最⼤值: Byte.MAX_VALUE = " + Byte.MAX_VALUE); // char System.out.println("基本类型:char ⼆进制位数:" + Character.SIZE); System.out.println("包装类:java.lang.Character"); // 以数值形式⽽不是字符形式将Character.MIN_VALUE输出到控制台 System.out.println("最⼩值:Character.MIN_VALUE=" +(int)Character.MIN_VALUE); // 以数值形式⽽不是字符形式将Character.MAX_VALUE输出到控制台 System.out.println("最⼤值:Character.MAX_VALUE="+(int) Character.MAX_VALUE); } } 运⾏结果: 基本类型:byte ⼆进制位数:8 包装类:java.lang.Byte 最⼩值:Byte.MIN_VALUE = -128 最⼤值: Byte.MAX_VALUE = 127 基本类型:char ⼆进制位数:16 包装类:java.lang.Character 最⼩值:Character.MIN_VALUE=0 最⼤值:Character.MAX_VALUE=65535 Float和Double的最⼩值和最⼤值都是以科学计数法的形式输出的,结尾的"E + 数字"表⽰E之前的数字要乘以10的多少次⽅。 eg:1.4E-45 —> 1.4 10^(-45) 数据类型转换必须满⾜如下规则: 数据类型转换必须满⾜如下规则:   1.不能对boolean类型进⾏类型转换   2.不能把对象类型转换成不相关类的对象   3.⼩的数据类型与⼤的数据类型做数值运算时,⼩的数据类型会⾃动提升为⼤的数据类型。   4.⼤的数据类型要转为⼩的数据类型必须强转,强转可能会丢失数据。   5.浮点数到整数的转换是通过舍弃⼩数得到,⽽不是四舍五⼊   低级--------> ⾼级   byte,short,char->int->long->float->double 举例说明: p

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值