[Java]循环步长不要设置成小数

昨天写了段逻辑很简单的代码,就是想模拟一下进度,但是这个进度是带小数的,而且只保留一位,每次小数跳0.1的时候,就打印一下curr的值。

代码如下:

public static void main(String[] args) {
    float max = 50f;
    float curr = 0f;
		
    while (curr < max) {
        curr += 0.1f;
        System.out.println(String.format("curr = %.1f", curr));
    }
}

但是结果究竟会是怎样的呢???运行结果如下,这里我只截取了最后一点:

231338_Otra_2658298.png

很多人应该就会纳闷了,为什么没带=,循环还是会多跑一次???

本人菜鸟一个,也没能闹明白是为什么......但是最后总结出一个经验:

就是循环的步长不能是小数,如果是小数,那么只要给的max足够大,循环次数必定会出问题。

那么如何让自己的“进度”带有小数呢?

本人的解决方法是这样的:

将max,和步长都放大 10 倍,转成 int 类型之后在进行循环操作,然后在要显示值的时候,再缩小10倍,并格式化成一位小数。

如下代码:

public static void main(String[] args) {
    int max = 500;
    int curr = 0;

    while (curr < max) {
        curr += 1;
        System.out.println(String.format("curr = %.1f", curr / 10f));
    }
}

这里要注意缩小10倍的时候,10后面要带 f,表示这个10是float类型的,否则会被默认成 int 类型进行计算,也就不会带有小数效果了,当然,用format格式化的时候直接就会报错了。

验证运行结果,如下喽:

233535_uUXL_2658298.png

转载于:https://my.oschina.net/shawnxia/blog/649597

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值