代码
四舍五入,保留几位小数
原版(有点多此一举),BigDecimal内部有方法做到这一点
package com.woniuxy.Demo1;
import java.util.Scanner;
import java.math.BigDecimal;
import java.lang.NumberFormatException;
import java.util.InputMismatchException;
public class Test1 {
static Scanner scanner = new Scanner(System.in); //打开扫描器
public static void main(String[] args) {
//定义一个浮点数 四舍五入 保留 位小数
System.out.println("请输入一个浮点数:");
BigDecimal num1 = new BigDecimal("0");//用户输入的浮点数初始化
while(true) {
try {
num1 = new BigDecimal(scanner.next());//输入
break;
}catch(NumberFormatException e) {//格式异常捕获
System.out.println("您输入的格式不对,请重新输入:");
}
}
System.out.println("请输入保留位数:");
int digit = 0;//保留位数初始化
while(true) {
try {
digit = scanner.nextInt();//用户输入
break;
}catch(InputMismatchException e) {//非整型数据异常捕获
System.out.println("您输入的保留位数格式不对,请重新输入:");
}
}
BigDecimal number = new BigDecimal("0");//结果初始化
number = retainDecimal(digit,num1); //调用方法处理
System.out.println(number);//例子:34.4587 34.46
scanner.close();//关闭扫描器
}
public static BigDecimal retainDecimal(int digit, BigDecimal number ) {
BigDecimal ten = new BigDecimal("10");//将10的类型改为BigDecimal类型,用于运算位数
BigDecimal carryBit = new BigDecimal("0.5");//同上,用于四舍五入
for(int i = 0; i < digit; i++)
number = number.multiply(ten);//乘以10
number = number.add(carryBit);//四舍五入步骤1
int num1 = number.intValue();//取整
BigDecimal num2 = new BigDecimal(num1);//将num1的类型从int转为BigDecimal类型
for(int j = 0; j < digit; j++)
num2 = num2.divide(ten);//除10
return num2;//返回一个BigDecimal类型的数
}
}