Android double保留两位小数:截取 和 四舍五入

时间:2021-09-25 09:47:40

方式一:

BigDecimal.setScale()方法用于格式化小数点
setScale(2);//表示保留2位小数,默认用四舍五入方式 
setScale(2,BigDecimal.ROUND_DOWN);//直接删除多余的小数位  11.116约=11.11
setScale(2,BigDecimal.ROUND_UP);//临近位非零,则直接进位;临近位为零,不进位。11.114约=11.12
setScale(2,BigDecimal.ROUND_HALF_UP);//四舍五入 2.335约=2.33,2.3351约=2.34
setScaler(2,BigDecimal.ROUND_HALF_DOWN);//四舍五入;2.335约=2.33,2.3351约=2.34,11.117约11.12
:原因是,计算机解析一个浮点数据时,和原始数据有偏差,如:
2.335  =2.33499999999999996447286321199499070644378662109375;
2.3350=2.33499999999999996447286321199499070644378662109375;
2.3351=2.335100000000000175504055732744745910167694091796875
疑问:ROUND_HALF_UP和ROUND_HALF_DOWN的差别?
 
注释:
1:
scale指的是数据的小数点后的位数。比如123.456则scale就是3.
scale()是BigDecimal类中的方法。
比如:BigDecimal b = new BigDecimal("123.456");
b.scale(),返回的就是3.
2:
roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种。
比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。
3:
pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
的意思是说:用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的,你可以自己选!

方式二:(舍入方式?)

java.text.DecimalFormat df = new java.text.DecimalFormat("#.00");  

df.format(你要格式化的数字);


例:
new java.text.DecimalFormat("#.00").format(3.1415926)

#.00 表示两位小数#.0000四位小数 以此类推...


方式三:(舍入方式?)

double d = 3.1415926;
String result = String .format("%.2f");
%.2f %.表示小数点前任意位数;2表示两位小数;格式后的结果为f 表示浮点型


//下面方式未验证

方式四:

复制代码代码如下:

NumberFormat ddf1=NumberFormat.getNumberInstance() ;
void setMaximumFractionDigits(int digits) 
digits 显示的数字位数 
为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的


import java.text.* ; 
import java.math.* ; 
class TT 

public static void main(String args[]) 
{ double x=23.5455; 
NumberFormat ddf1=NumberFormat.getNumberInstance() ;


ddf1.setMaximumFractionDigits(2); 
String s= ddf1.format(x) ; 
System.out.print(s); 

}


代码代码如下:
import java.text.*;
DecimalFormat df=new DecimalFormat(".##");
double d=1252.2563;
String st=df.format(d);
System.out.println(st);