浮点变量+f的问题
答案:6 悬赏:60 手机版
解决时间 2021-03-24 12:42
- 提问者网友:相思似海深
- 2021-03-23 11:51
浮点变量+f的问题
最佳答案
- 五星知识达人网友:鸽屿
- 2021-03-23 12:07
数字后面加f是表明该数字为单精度浮点型数字(float);类似地,后面如果加d则是表明该数字为双精度浮点型数字(double)。如果在代码中使用一个小数而没有加任何后缀,则此数字自动视为double类型。
回到问题本身。float x = 3.14f; 是一个声明赋值语句。如果3.14后面不加后缀f,则系统将认定3.14是double类型的常量,并将double类型赋值到float类型的x变量中。而double变为float是丢失精度的,因此它被编译器认定为带有危险性的行为,一般会弹出一个Warning。所以,在为float类型赋值常量时,通常在后面加后缀f,通知编译器常量的类型是float,以避免被编译器误判为丢失精度。追问其实 我觉得这样 很坑爹
理论上 直接定义为float 不是就直接是float了吗 还要加个f才行
那float 有什么意思啊!追答恩,事实上编译器在处理float x = 3.14f; 这条语句时,是将这条语句拆开分别编译的:
float x;
x = 3.14f;
你看到,float这个关键字只对x有效。它只声明了x的类型,而并不声明3.14的类型。
为了方便说明,再举一个例子:
double a = 3.141592653589793;
float x = a;
这时由于精度丢失弹出的Warning语句就非常必要了。追问你是程序员吗追答程序是我的工具,但程序员不是我的工作。追问我想问问 对于一个初学者来讲 是先学C 还是C++ 还是其他语言好呢追答这并没有一定之规。如果你想循序渐进,做一名优秀的程序员,建议你从C/C++开始。一是因为这种语言对内存指针的要求较高,对掌握知识有帮助,二是因为这种语言的著名教科书很多。如果你想跳过那些底层的知识,上手快些的话,也可以直接学习Java或者C#,等逐渐熟练了再回过头来关注底层的内容。
回到问题本身。float x = 3.14f; 是一个声明赋值语句。如果3.14后面不加后缀f,则系统将认定3.14是double类型的常量,并将double类型赋值到float类型的x变量中。而double变为float是丢失精度的,因此它被编译器认定为带有危险性的行为,一般会弹出一个Warning。所以,在为float类型赋值常量时,通常在后面加后缀f,通知编译器常量的类型是float,以避免被编译器误判为丢失精度。追问其实 我觉得这样 很坑爹
理论上 直接定义为float 不是就直接是float了吗 还要加个f才行
那float 有什么意思啊!追答恩,事实上编译器在处理float x = 3.14f; 这条语句时,是将这条语句拆开分别编译的:
float x;
x = 3.14f;
你看到,float这个关键字只对x有效。它只声明了x的类型,而并不声明3.14的类型。
为了方便说明,再举一个例子:
double a = 3.141592653589793;
float x = a;
这时由于精度丢失弹出的Warning语句就非常必要了。追问你是程序员吗追答程序是我的工具,但程序员不是我的工作。追问我想问问 对于一个初学者来讲 是先学C 还是C++ 还是其他语言好呢追答这并没有一定之规。如果你想循序渐进,做一名优秀的程序员,建议你从C/C++开始。一是因为这种语言对内存指针的要求较高,对掌握知识有帮助,二是因为这种语言的著名教科书很多。如果你想跳过那些底层的知识,上手快些的话,也可以直接学习Java或者C#,等逐渐熟练了再回过头来关注底层的内容。
全部回答
- 1楼网友:北城痞子
- 2021-03-23 14:45
如果不加f默认是double类型,double比float精度高,会丢失精度的
- 2楼网友:走死在岁月里
- 2021-03-23 14:03
说明X=3.1400000
对于一个小数其默认类型为double型,如果需要指定为float型,需要在小数后面添加F或f后缀。
对于一个小数其默认类型为double型,如果需要指定为float型,需要在小数后面添加F或f后缀。
- 3楼网友:罪歌
- 2021-03-23 13:23
float x=3.14f;//指定x为单精度实型量,如果不加f为双精度实型量,C中单精度型占4个字节(32位)内存空间,双精度型占8 个字节(64位)内存空间。
- 4楼网友:大漠
- 2021-03-23 12:37
float x=3.14;
float 仅仅是说明x是个float 但是3.14 是个double, 这样初始化x的时候会有从double到float的转换
而3.14f就不一样了 ,3.14f就是个float,初始化的时候没有转换过程
float 仅仅是说明x是个float 但是3.14 是个double, 这样初始化x的时候会有从double到float的转换
而3.14f就不一样了 ,3.14f就是个float,初始化的时候没有转换过程
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯