JAVA - 保留多少位小数的方法

104 篇文章 0 订阅
32 篇文章 0 订阅

JAVA - 保留多少位小数的方法

方法一 bigDecimal.setScale()

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

BigDecimal.setScale()方法用于格式化小数点
1.setScale(1)表示保留一位小数,默认用四舍五入方式
2.setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
3.setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
4.setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
5.setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
例子:

public static double reserved(double d,int n){
        BigDecimal bigDecimal = new BigDecimal(d);
        double d2 = bigDecimal.setScale(n,BigDecimal.ROUND_HALF_UP).doubleValue();
        return d2;
}
public static void main(String[] args) {
    System.out.println("reserved(1234.567,2) = " + reserved(1234.567,2));
}

在这里插入图片描述

方法二 numberFormat.format()

NumberFormat 是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat 还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。NumberFormat 可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。

数值格式化
1.getInstance()、getNumberInstance()。返回当前默认语言环境的通用数值格式。
2.getInstance(Locale)、getNumberInstance(Locale)。返回指定语言环境的通用数值格式。
3.NumberFormat.setMinimumIntegerDigits(int)。设置数的整数部分所允许的最小位数。
4.NumberFormat.setMaximumIntegerDigits(int)。设置数的整数部分所允许的最大位数。
5.NumberFormat.setMinimumFractionDigits(int)。设置最少小数点位数,不足的位数以0补位,超出的话按实际位数输出。
6.NumberFormat.setMaximumFractionDigits(int)。设置最多保留小数位数,不足不补0。

例子:

public static String reserved(double d,int n){
        NumberFormat numberFormat = NumberFormat.getNumberInstance();
        numberFormat.setMaximumFractionDigits(n);
        String str = numberFormat.format(d);
        return str;
}
public static void main(String[] args) {
    System.out.println("reserved(1234.567,2) = " + reserved(1234.567,2));
}

在这里插入图片描述

方法三 decimalFormat.format()

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。
DecimalFormat 包含一个模式 和一组符号
在这里插入图片描述

(1)0:
比实际数字的位数多,不足的地方用0补上。
比实际数字的位数少:整数部分不改动,小数部分,四舍五入
1.new DecimalFormat(“00.00”).format(3.14) //结果:03.14
2.new DecimalFormat(“0.000”).format(3.14) //结果: 3.140
3.new DecimalFormat(“00.000”).format(3.14) //结果:03.140

(2)#:
比实际数字的位数多,不变。
比实际数字的位数少:整数部分不改动,小数部分,四舍五入
1.new DecimalFormat("##.##").format(3.14) //结果:3.14
2.new DecimalFormat("#.###").format(3.14) //结果: 3.14
3.new DecimalFormat("##.###").format(3.14) //结果:3.14
4.new DecimalFormat("##.##").format(13.146) //结果:13.15

例子:

public static String reserved(double d){
        java.text.DecimalFormat decimalFormat = new java.text.DecimalFormat("#.00");
        String d2 = decimalFormat.format(d);
        return d2;
}
public static void main(String[] args) {
    System.out.println("reserved(1234.567) = " + reserved(1234.567));
}

在这里插入图片描述

方法四 String.format()

String.format("%.nf",d);----表示保留N位
例子:

public static String reserved(double d){
        String str = String.format("%.2f",d);
        return str;
}
public static void main(String[] args) {
    System.out.println("reserved(1234.567) = " + reserved(1234.567));
}

在这里插入图片描述

扩展

注意: NumberFormat和DecimalFormat是线程不安全的。

NumberFormat 货币格式化
1.getCurrencyInstance()。静态方法,建立一个NumberFormat类的对象并返回引用,该引用指定货币格式为系统预设的货币格式。
2.getCurrencyInstance(Locale) 。静态方法,建立一个NumberFormat类的对象,并返回引用,该引用的货币格式由Locale指定。Locale类在java.util包中。
例子

	NumberFormat nf = NumberFormat.getCurrencyInstance();
	nf = NumberFormat.getCurrencyInstance(Locale.US);
	nf.format(123.456);//$123.46

NumberFormat 百分比格式化
1.getPercentInstance()。静态方法,创建一个NumberFormat类的对象并返回其引用。该对象指定百分比格式为系统预设格式。
2.getPercentInstance(Locale)。静态方法,创建一个NumberFormat类的对象并返回引用。该对象的百分比格式由Locale来指定。

例子

		double d = 123.456;
        NumberFormat nf = NumberFormat.getPercentInstance();
        nf.format(d);//12,346%
        nf = NumberFormat.getPercentInstance(Locale.FRANCE);
        nf.format(d);//12 346 %
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值