Double 형식 연산 시의 정밀도 문제
3713 단어 자바
package cn.soft.util;
import java.io.Serializable;
import java.math.BigDecimal;
import org.springframework.stereotype.Component;
/**
* : double , 0.0000000000000002 , BigDecimal
, 12.11+1.10 1211+110 , /100
BigDecimal :
*@author:
*@date: :2014-5-10 : 12:23:21
*@version 1.0
*/
@Component
public class DoubleUtil implements Serializable {
private static final long serialVersionUID = -3345205828566485102L;
//
private static final Integer DEF_DIV_SCALE = 2;
/**
* 。
* @param value1
* @param value2
* @return
*/
public Double add(Number value1, Number value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue()));
BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue()));
return b1.add(b2).doubleValue();
}
/**
* 。
*
* @param value1
*
* @param value2
*
* @return
*/
public double sub(Number value1, Number value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue()));
BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue()));
return b1.subtract(b2).doubleValue();
}
/**
* 。
*
* @param value1
*
* @param value2
*
* @return
*/
public Double mul(Number value1, Number value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue()));
BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue()));
return b1.multiply(b2).doubleValue();
}
/**
* ( ) , , 10 , 。
*
* @param dividend
*
* @param divisor
*
* @return
*/
public Double div(Double dividend, Double divisor) {
return div(dividend, divisor, DEF_DIV_SCALE);
}
/**
* ( ) 。 , scale , 。
*
* @param dividend
*
* @param divisor
*
* @param scale
* 。
* @return
*/
public Double div(Double dividend, Double divisor, Integer scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(dividend));
BigDecimal b2 = new BigDecimal(Double.toString(divisor));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 。
*
* @param value
*
* @param scale
*
* @return
*/
public Double round(Double value, Integer scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(value));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.