单精度四舍五入算法
- 从输入中读取浮点数
- 将浮点数加上0.5后取整
代码实现
如下是单精度四舍五入算法的代码实现
import java.util.Scanner;
/**
* 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
*/
public class Rounded {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
float num = scanner.nextFloat();
System.out.println((int)(num + 0.5));
}
}
运行资源信息如下:
细节优化
上述代码看起来没有问题,那我们来看看编译后的class文件
import java.util.Scanner;
public class Rounded {
public Rounded() {
}
public static void main(String[] var0) {
Scanner var1 = new Scanner(System.in);
float var2 = var1.nextFloat();
System.out.println((int)((double)var2 + 0.5D));
}
}
此时会发现在加上0.5时,编译器自动将参数转为了double再进行计算,因为此时的0.5是double,在java的隐式转换当中,float+double会将float隐式转换为double后再相加
以下是笔者的改进
import java.util.Scanner;
/**
* 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
*/
public class Rounded {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
float num = scanner.nextFloat();
// 只是在0.5后加了个f,表示是单精度浮点数0.5
System.out.println((int)(num + 0.5f));
}
}
运行消耗的资源如下:
比未优化后的代码运行时间快了近20ms,内存资源也有所优化。