BigDecimal详解

代码

四舍五入,保留几位小数

原版(有点多此一举),BigDecimal内部有方法做到这一点

  1. package com.woniuxy.Demo1;
  2. import java.util.Scanner;
  3. import java.math.BigDecimal;
  4. import java.lang.NumberFormatException;
  5. import java.util.InputMismatchException;
  6. public class Test1 {
  7. static Scanner scanner = new Scanner(System.in); //打开扫描器
  8. public static void main(String[] args) {
  9. //定义一个浮点数 四舍五入 保留 位小数
  10. System.out.println("请输入一个浮点数:");
  11. BigDecimal num1 = new BigDecimal("0");//用户输入的浮点数初始化
  12. while(true) {
  13. try {
  14. num1 = new BigDecimal(scanner.next());//输入
  15. break;
  16. }catch(NumberFormatException e) {//格式异常捕获
  17. System.out.println("您输入的格式不对,请重新输入:");
  18. }
  19. }
  20. System.out.println("请输入保留位数:");
  21. int digit = 0;//保留位数初始化
  22. while(true) {
  23. try {
  24. digit = scanner.nextInt();//用户输入
  25. break;
  26. }catch(InputMismatchException e) {//非整型数据异常捕获
  27. System.out.println("您输入的保留位数格式不对,请重新输入:");
  28. }
  29. }
  30. BigDecimal number = new BigDecimal("0");//结果初始化
  31. number = retainDecimal(digit,num1); //调用方法处理
  32. System.out.println(number);//例子:34.4587 34.46
  33. scanner.close();//关闭扫描器
  34. }
  35. public static BigDecimal retainDecimal(int digit, BigDecimal number ) {
  36. BigDecimal ten = new BigDecimal("10");//将10的类型改为BigDecimal类型,用于运算位数
  37. BigDecimal carryBit = new BigDecimal("0.5");//同上,用于四舍五入
  38. for(int i = 0; i < digit; i++)
  39. number = number.multiply(ten);//乘以10
  40. number = number.add(carryBit);//四舍五入步骤1
  41. int num1 = number.intValue();//取整
  42. BigDecimal num2 = new BigDecimal(num1);//将num1的类型从int转为BigDecimal类型
  43. for(int j = 0; j < digit; j++)
  44. num2 = num2.divide(ten);//除10
  45. return num2;//返回一个BigDecimal类型的数
  46. }
  47. }