HJ7 取近似值
法一
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double num = input.nextDouble();
/**
* 使用现成的函数round()
*/
//System.out.println(Math.round(num));
int a = (int)num;
System.out.println((num - a) >= 0.5 ? a + 1 : a );
}
}
算法实现
将浮点数强制转换为整数,它会只保留整数部分,这个时候用原来的数减去整数部分,就可以得到小数部分,再比较小数部分和0.5的大小,如果大于等于0.5,则返回整数部分加一,如果小于0.5,则返回整数部分。
法二
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
float fl = in.nextFloat();
BigDecimal bd = BigDecimal.valueOf(fl).setScale(0, BigDecimal.ROUND_HALF_UP);
System.out.println(bd);
}
}
知识点:BigDecimal 精算小数位处理方式
//原始数据
double val = 42.195;
//转成BigDecimal 类型
BigDecimal bd = new BigDecimal(String.valueOf(val));
//四舍五入
BigDecimal bd1 = bd.setScale(0, BigDecimal.ROUND_HALF_UP); //需判断小数第1位 ,最后保留为整数
BigDecimal bd2 = bd.setScale(1, BigDecimal.ROUND_HALF_UP); //需判断小数第2位 ,最后保留为一位小数
//向下取整
BigDecimal bd3 = bd.setScale(0, BigDecimal.ROUND_DOWN); //需判断小数第1位
BigDecimal bd4 = bd.setScale(1, BigDecimal.ROUND_DOWN); //需判断小数第2位
//向上取整
BigDecimal bd5 = bd.setScale(0, BigDecimal.ROUND_UP); //需判断小数第1位
BigDecimal bd6 = bd.setScale(1, BigDecimal.ROUND_UP); //需判断小数第2位
知识点:函数 toPlainString() 和 toString()区别
对于
BigDecimal b ;
b=(0.4321)^ 20;
String s = b.toPlainString() ;
System.out.println(s) ;
输出为:
0.00000005148554641076956121994511276767154838481760200726351203835429763013462401
若
String s = b.toString() ;
输出为:
5.148554641076956121994511276767154838481760200726351203835429763013462401E-8
在得到的小数,要对其小数点后面的零进行处理,用到:
BigDecimal stripTrailingZeros() 返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。
对得到的数据用科学计数法就用:
String toPlainString() 返回不带指数字段的此 BigDecimal 的字符串表示形式。
通俗来讲就是直接显示,不用科学计数法表示。
import java.math.BigDecimal;
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal bg = new BigDecimal("1E11");
System.out.println(bg.toEngineeringString());
System.out.println(bg.toPlainString());
System.out.println(bg.toString());
}
}
输出:
• 100E+9
• 100000000000
• 1E+11