我是靠谱客的博主 文艺机器猫,最近开发中收集的这篇文章主要介绍java小数点精度的问题                            小数点的精度问题,四舍五入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

                            小数点的精度问题,四舍五入

在做公司的支付系统的时候,遇到了一个很小的问题,但是前后改了很多次,就是钱的精度问题。要求是保留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小数点精度的问题                            小数点的精度问题,四舍五入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部