我要声明一个float变量,语句如下:
float a=1.123456789
float a=1.123456789f
这两种声明方式好像能得到同样的效果,那第二种方式的后缀“f”有什么用?
书上好像说前者是double,但我声明的变量是float啊,怎么变成double了?
前者和后者的赋值过程其实是不一样的。浮点数如果后面不加f则默认视为double类型,也就是说1.123456789是一个double类型的常量,在赋值给float类型变量a时经过了一次类型转换,由double类型转换成float类型,而汪岁迹后者则是直接赋值,因为常量1.123456789f本身就是float类型。实际应用上这种转换可能会损失一定的精度,但是只要把常量控制在float精度之内则是几乎没有区别的,除了多余的类型转换会降低一困并点效率而已。变量本身的类型则是不会变化的,如果a声明时是float类雀燃型就永远是float类型,所有传入的数据都会被自动转换成float类型。
浮点运算其实并中模不精确,对于大数字越高位越精确,越低位越不精确禅陪,这也满足
科学的需求,所以保留的有效数字基本是精确的,至于保留应该是直接用去尾法贺培蠢保留吧。