package com.csbaic.edatope.app.utils;
import java.math.BigDecimal;
/**
*
* @author 2857157751@qq.com
* @since 2023/7/25
* 精度转换工具
*/
public class AccuracyUtil {
/**
*
* @param a 小数
* @param accuracy 小数后有效位数几位
* @return 0.0053008 ==保留有效小数两位=>0.0053
*/
public static BigDecimal accuracyControl(Double a, int accuracy){
String s = String.valueOf(a);
String start = s.substring(0, s.indexOf(".") + 1);
String end=s.substring(s.indexOf(".")+1,s.length());
StringBuffer buffer = new StringBuffer();
int num=0;//记录小数后有几位
for (int i = 0; i < end.length(); i++) {
buffer.append(end.charAt(i));
if(Integer.valueOf(end.charAt(i)-'0')!=0){
num=i+accuracy;
for (int j = i+1; j <= accuracy+i+1; j++) {
if(j<end.length()){
buffer.append(end.charAt(j));
}else break;
}
break;
}
}
StringBuffer answer = new StringBuffer();
answer.append(start);answer.append(buffer);
Double value = Double.valueOf(answer.toString());
double pow = Math.pow(10, num);
long round = Math.round(value * pow);
double an=round/(pow*1.0);
return new BigDecimal(an);
}
}
精度控制工具
最新推荐文章于 2024-09-10 10:56:36 发布
AccuracyUtil是一个Java工具类,主要用于进行数值精度转换。它接受一个Double类型的数值和一个小数位数参数,通过处理数值的小数部分,确保指定精度后的结果正确。方法accuracyControl使用Math.pow和Math.round来实现四舍五入,并返回一个新的BigDecimal对象。
摘要由CSDN通过智能技术生成