昨天写了段逻辑很简单的代码,就是想模拟一下进度,但是这个进度是带小数的,而且只保留一位,每次小数跳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格式化的时候直接就会报错了。
验证运行结果,如下喽: