int n=10的sizeof 为什么是四_为什么float后面要加f

去年面试,笔试时有一道题是:

问题:float f=3.4;是否正确?

我当时真是想都没想就填了个正确。结果就是基础都不过关了。(我还深深地记得上大学时,教我的java老师特意在课上说过这个问题,忘得一干二净)

a71f26998a12f3cd722e9e4d369d34aa.png

对于我们码农来说,真的是万事都是增删改查,都习以为常了,而java中的一些小细节可能我们都把他们忘记了,今天我就帮大家拾起java中冰山一角的float吧。

float:浮点型数据类型,用于存储单精度浮点数或双精度浮点数

在编译器中直接写 float a= 3.4;

2853931409e663373426d8dc798db053.png

不正确写法

直接就报错了,(我想说这个问题真的很明显,可是吧真的给忽略了)

说到这里,大家也知道答案了,肯定是不正确了。

原因:编译器可以自动向上转型,如int 转成 long 系统自动转换没有问题,因为后者精度更高

double 转成 float 就不能自动做了,所以后面的加上个 f;也就是说必须写成float f=(float)3.4 或float f = 3.4f

5a11c392914bd47d045c427da1244267.png

正确写法

记住这一点:在java里面,没小数点的默认是int,有小数点的默认是 double

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,可以将重复使用的变量提取出来,避免多次申明和初始化。比如可以将 `isDraw` 的计算提到循环外部;将 `szVal` 的申明和初始化提到循环外部;将 `val` 的计算提到循环外部。 其次,可以将多个 if 判断合并成一个 if-else if-else 的结构,避免重复判断。比如可以将 `(i>=RUN_INNER_EN_OL)&&(i<=RUN_INNER_EN_OVL)` 和 `(i>=RUN_INNER_ENW_OC)&&(i<=RUN_INNER_ENW_ZIC)` 合并成一个 else if 判断。 最后,可以使用三元表达式简化代码,避免重复的判断。比如可以将 `(i == RUN_INNER_SW_PN ? gcszLcdPNMode[(int)val] :gcszOnOff[(int)val])` 使用三元表达式替换。 优化后的代码如下: ```c memset(szVal, 0, sizeof(szVal)); int isDraw = (not == 2 && (draw == (i+1))); float val = get_RunParaInfo_val(UNIT_GAP_RT1064,gapid,i); char *str = NULL; if (i >= (RUN_INNER_PARA_SIZE -1)) break; if ((i>=RUN_INNER_EN_OL && i<=RUN_INNER_EN_OVL) || (i>=RUN_INNER_ENW_OC && i<=RUN_INNER_ENW_ZIC) || (i == RUN_INNER_ENW_ZIV) || (i == RUN_INNER_SW_PN) || (i == RUN_INNER_SY_ALM) || (i>=RUN_INNER_DY_ON && i<=RUN_INNER_U0_ON)) { LCD_DisString((i%LISTOFFSET)+1, 0, (char *) *(RunGapName+i)); char *valStr = (i == RUN_INNER_SW_PN ? gcszLcdPNMode[(int)val] : gcszOnOff[(int)val]); displayString(isDraw, valStr, (i%LISTOFFSET)+1, (i == RUN_INNER_SW_PN ? 14 : 18)); } else { LCD_DisString((i%LISTOFFSET)+1, 0, (char *)*(RunGapName+i)); sprintf(szVal, "%0.4f", val); LCD_DisString((i%LISTOFFSET)+1, 17, szVal); str = (isDraw == 1) ? LCD_BitNot(UNIT_RUNPARAM, UNIT_GAP_RT1064, gapid, i, i, bit) : NULL; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值