1.BigDecimal实现四舍五入
*public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
*返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。如果必须执行舍入,以生成具有指定标度的结果,则应用指定的舍入模式。
*参数:
* divisor - 此 BigDecimal 要除以的值。
* scale - 要返回的 BigDecimal 商的标度。
* roundingMode - 要应用的舍入模式。
* 返回:
* this / divisor
* 抛出:
* ArithmeticException - 如果 divisor 为零,则 roundingMode==RoundingMode.UNNECESSARY
* 和指定的标度不足以准确地表示相除的结果。
2. DecimalFormat 实现四舍五入
DecimalFormat df = new DecimalFormat("#.0000");
* pattern:
* 0:表示数字位,但用作小数部分时可以作为一个强制的数字位,如:1.12304(保留三位小数)#.#### 得到1.123 #.0000-> 1.230
* #:表示数字位
* .:小数分隔符
* ,:整数分隔符
3. 详细见代码
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class DevideTest {
/**
* 9. 编写一个方法完成两个数相除:double divide(double a, double divisor);
* 结果返回一个double数舍五入保留4位小数。
* Math.PI 除以 1.3531 = ?
*/
public static double divide(double a, double b){
return a/b;
}
public static void main(String[] args) {
double result = divide(Math.PI,1.3531);
System.out.println("未四舍五入: " + result);
DecimalFormat df = new DecimalFormat("#.0000");
System.out.println("四舍五入之后,保留四位数结果:" + df.format(new BigDecimal(result)));
System.out.println();
BigDecimal decimal = new BigDecimal(Math.PI);
BigDecimal divisor = new BigDecimal(1.3531);
/**
* public BigDecimal divide(BigDecimal divisor,
* int scale,
* RoundingMode roundingMode)
* 返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。如果必须执行舍入,以生成具有指定标度的结果,则应用指定的舍入模式。
*
* 参数:
* divisor - 此 BigDecimal 要除以的值。
* scale - 要返回的 BigDecimal 商的标度。
* roundingMode - 要应用的舍入模式。
* 返回:
* this / divisor
* 抛出:
* ArithmeticException - 如果 divisor 为零,则 roundingMode==RoundingMode.UNNECESSARY
* 和指定的标度不足以准确地表示相除的结果。
*
*/
BigDecimal result2 = decimal.divide(divisor,4, RoundingMode.HALF_UP);
System.out.println("四舍五入之后,保留四位数结果:" + result2);
//NumberFormat 为父类
NumberFormat numberFormat = NumberFormat.getInstance();
//作用:当在网页中显示数字同样位数可以更好看,更整洁
//保留最大整数部分
numberFormat.setMaximumIntegerDigits(3);
//保留最大小数部分
numberFormat.setMaximumFractionDigits(4);//2.1230
//保留最小小数部分
numberFormat.setMinimumFractionDigits(3);//2.123
//默认格式保留3位小数
String str = numberFormat.format(Math.PI * 1000);
System.out.println("\n Math.PI * 1000 保留3位最大整数部分 保留4位最大小数部分" + str +"结果是不正确的,舍去了3");
//DecimalFormat是子类,pattern可以设置数字格式
/**
* pattern:
* 0:表示数字位,但用作小数部分时可以作为一个强制的数字位,如:1.12304(保留三位小数)#.#### 得到1.123 #.0000-> 1.230
* #:表示数字位
* .:小数分隔符
* ,:整数分隔符
*/
DecimalFormat decimalFormat = new DecimalFormat("#,###.####");
String relust3 = decimalFormat.format(1123.23403);
String relust4 = decimalFormat.format(1123.23423);
System.out.println("\n使用#,###.####,1123.23403 = " + relust3);
System.out.println("使用#,###.####,1123.23423 = " + relust4);
}
}