您的位置:首页 > 编程语言 > Java开发

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

2016-03-30 14:54 281 查看
摘要: 循环的步长不能是小数,可能我这里说的比较绝对了,但是最好最好不要用小数。
不然只要max足够大,循环次数必定会出问题!!!

昨天写了段逻辑很简单的代码,就是想模拟一下进度,但是这个进度是带小数的,而且只保留一位,每次小数跳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));
}
}

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



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

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

就是循环的步长不能是小数,如果是小数,那么只要给的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格式化的时候直接就会报错了。

验证运行结果,如下喽:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: