概述
小数点的精度问题,四舍五入
在做公司的支付系统的时候,遇到了一个很小的问题,但是前后改了很多次,就是钱的精度问题。要求是保留2位小数,也就是精确到人民币的“分”。下面就是我的改bug 的痛苦经历,直接帖出代码
package com.msds;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class test {
public static void main(String[] args) {
// //第一种bug
// Double a=new Double("209");
// Double b=a*0.0065;
// BigDecimal c = new BigDecimal(b);
// Double d=c.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); //四舍五入保留2位小数
// String transFee=d.toString();
// transFee = String.format("%.2f",d);
// //第二次bug
// Double a = new Double(576);
// Double b = a*0.0065;
// Double c = (double)Math.round(b*100)/100;
// String transFee = c.toString();
//
// //第三次bug
// BigDecimal a = new BigDecimal(576);
// BigDecimal b = a.multiply(new BigDecimal(0.0065)); //交易费率0.0065
// BigDecimal c = b.setScale(2, RoundingMode.UP);
// String transFee = c.toString();
//
// //第四次-bug
// String orderAmt="576";
// double a=Double.parseDouble(orderAmt);
// double b=a*0.0065; //交易费率0.0065
// double c = round(b,2);
// String transFee = String.valueOf(c);
//第五次-bug
double a=370;
double b=a*0.0065;
double c=a*0.0065;
String d = String.format("%.2f", c);
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
private static double round(double num,int scale) {
return Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale);
}
}
,上面的前4 种方式,都会出现问题,结果并不是,想要的保留两位小数后,四舍五入的数值。只有最后一种方式,没有出现问题。记录下。
比如,方法3 中,结果会是这样的,我们想得到3.74,结果却得到了 3.75。。。。。
最后
以上就是文艺机器猫为你收集整理的java小数点精度的问题 小数点的精度问题,四舍五入的全部内容,希望文章能够帮你解决java小数点精度的问题 小数点的精度问题,四舍五入所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复