JAVA-保留多少位⼩数的⽅法
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 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 可⽤于格式化和解析任何语⾔环境的数值。使代码能够完全独⽴于⼩数点、千位分隔符甚⾄所⽤特定⼩数位数的语⾔环境约定,并与数值格式是否为偶⼩数⽆关。
数值格式化
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 = NumberInstance();
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补上。
⽐实际数字的位数少:整数部分不改动,⼩数部分,四舍五⼊
3.14) //结果: 3.140
(2)#:
⽐实际数字的位数多,不变。
⽐实际数字的位数少:整数部分不改动,⼩数部分,四舍五⼊
3.14) //结果: 3.14
例⼦:
public static String reserved(double d){
DecimalFormat decimalFormat =new 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 货币格式化
例⼦
NumberFormat nf = CurrencyInstance();
nf = CurrencyInstance(Locale.US);
nf.format(123.456);//$123.46
NumberFormat 百分⽐格式化
double d =123.456;
NumberFormat nf = PercentInstance();
nf.format(d);//12,346%
nf = PercentInstance(Locale.FRANCE);
nf.format(d);//12 346 %