Java的简单类型无法准确计算浮点数
//*
*提供准确的加法运算。
* @param v1被加数
* @param v2加法
* @return个参数之和
*/
publicstaticdoubleadd (双精度v1,双精度v2 ) )。
{
bigdecimal B1=new bigdecimal (双. tostring ) V1 );
bigdecimal B2=new bigdecimal (双. tostring ) V2 );
returnB1.add(B2 ).doubleValue );
}
//*
提供准确的减法。
*
* @param v1被减数
* @param v2减数
* @return个参数之差
*/
publicstaticdoublesubtract (双精度v1,双精度v2 ) )。
{
bigdecimal B1=new bigdecimal (双. tostring ) V1 );
bigdecimal B2=new bigdecimal (双. tostring ) V2 );
returnB1.subtract(B2 ).doubleValue );
}
//*
*提供精确的乘法运算。
*
* @param v1被乘数
* @param v2乘数
* @return个参数的乘积
*/
publicstaticdoublemultiply (双v 1,双v2)。
{
bigdecimal B1=new bigdecimal (双. tostring ) V1 );
bigdecimal B2=new bigdecimal (双. tostring ) V2 );
returnB1.multiply(B2 ).doubleValue );
}
//*
*不能整除时,精确除以小数点后10位,之后的数字四舍五入(相对),提供精确的除法。
*
* @param v1被除数
* @param v2除数
* @return个参数的商
*/
publicstaticdoubledivide (双精度v1,双精度v2 ) )。
{
返回divide (v1,v2,DEF_DIV_SCALE );
}
//*
*提供准确的除法运算。 如果出现无法整除的情况,请使用scale参数指定精度,之后的数字进行四舍五入。
*
* @param v1被除数
* @param v2除数
* @param scale表示必须精确到小数点后几位。
* @return个参数的商
*/
publicstaticdoubledivide (双精度v1,双精度v2,int scale ) )。
{
是if (比例0 )
{
thrownewillegalargumentexception (thescalemustbeapositiveintegerorzero );
}
bigdecimal B1=new bigdecimal (双. tostring ) V1 );
bigdecimal B2=new bigdecimal (双. tostring ) V2 );
returnB1.divide(B2,scale,BigDecimal.ROUND_HALF_UP ).doubleValue );
}
//*
*提供准确的小数点后四舍五入处理。
*
* @param v需要四舍五入的数字
* @param scale保留小数点后几位
* @返回四舍五入的结果
*/
publicstaticdoubleround (双精度,内比例) )。
{
是if (比例0 )
{
thrownewillegalargumentexception (thescalemustbeapositiveintegerorzero );
}
bigdecimal b=new bigdecimal (double.tostring ) v );
bigdecimalone=newbigdecimal('1';
returnb.divide(one,scale,BigDecimal.ROUND_HALF_UP ).doubleValue );
}