Android数据的处理(四舍五入、保留小数点后的位数)
一、Math
Math.round //对一个数四舍五入Math.round(11.6) = 12;Math.round(-11.6) = -12;
Math.round(-0.1) = 0;Math.round(0.1) = 0;如果出现向上向下距离一样的数值
例:
Math.round(11.5) ,首先与 11.5最接近的有两个整数 11 和 12,取较大的那个,结果就是12;
Math.round(-11.5),首先与 -11.5最接近的有两个整数 -11 和 -12,取较大的那个,结果就是-11;
Math.floor //对一个数向下取整floor的英文意义是地板,该方法就表示向下取整,
所以,
Math.floor(11.6)的结果为11,
Math.floor(-11.6)的结果是-12;
Math.ceil //对一个数向上取整ceil的英文意义是天花板,该方法就表示向上取整,
所以,
Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;
Math.pow(a,b) //a为底数,b为几次方
二、保留小数点后的位数
例如:保留小数点后两位
1、使用String的format方法,语法“String.format(“%.2f”,数值)”;String的format方法(推荐)double f = 111231.5585;System.out.println(String.format("%.2f", f));System.out: 111231.56
2、用DecimalFormat的format方法;
DecimalFormat的format方法double f = 111231.5585;DecimalFormat df = new DecimalFormat("#.00"); System.out.println(df.format(f));System.out: 111231.56保留1位小数
double f = 111231.5585;DecimalFormat df = new DecimalFormat("#.0"); System.out.println(df.format(f));System.out: 111231.6保留1位小数,当小数点后的小数为0的时候省略
double f = 100.0;DecimalFormat df = new DecimalFormat("#.#"); System.out.println(df.format(f));System.out: 100
3、使用BigDecimal的setScale方法;double f = 111231.5585;BigDecimal bg = new BigDecimal(f);double f1 = bg.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();System.out.println(f1);System.out: 111231.56
4、使用Formatter 的format类double f = 111231.5585;Formatter formatter = new Formatter();// %.2f % 表示 小数点前任意位数 2 表示两位小数 格式后的结果为 f 表示浮点型Formatter f1 = formatter.format("%.2f", f);System.out.println(f1);System.out: 111231.56
5、通过运算double f = 111231.5585;long l =(long)(f*100) ;double d = l/100D;System.out.println(d);System.out: 111231.55
6、使用 NumberFormat 类double f = 111231.5585;NumberFormat nf = NumberFormat.getNumberInstance();nf.setMaximumFractionDigits(2);/*
* setMinimumFractionDigits设置成2
* 如果不这么做,那么当value的值是100.00的时候返回100
* 而不是100.00*/
nf.setMinimumFractionDigits(2);
/*
* 如果想输出的格式用逗号隔开,可以设置成true*/nf.setGroupingUsed(false);String format = nf.format(f);System.out.println(format);System.out: 111231.56
三、去除double多余的0
/*** 去除double多余的0(格式化为##.##)*/
public static String formatDouble(double num) {DecimalFormat df = new DecimalFormat("##.##");return df.format(num);
}
四、小数点向后移动两位
例如:EditText输入的价格元转换为分1.25 -> 125(et_price.text.toString().trim().toFloat()) * 100(et_price.text.toString().trim().toDouble()) * 100这两种转换会有异常建议使用以下方法:BigDecimal(et_price.text.toString().trim()).movePointRight(2).intValueExact()或者 /*** 将单位为元的金额转换为单位为分** @param yuan 单位为元的字符型值* @return*/public static int yuan2Fen(String yuan) {int value = 0;try {BigDecimal var1 = new BigDecimal(yuan);BigDecimal var2 = new BigDecimal(100);BigDecimal var3 = var1.multiply(var2);value = Integer.parseInt(var3.stripTrailingZeros().toPlainString());} catch (Exception e) {throw new IllegalArgumentException(String.format("非法金额[%s]", yuan));}Assert.isTrue(value >= 0, String.format("非法金额[%s]", yuan));return value;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
