java 保留两位小数的几种方法
1.代码:
importjava.math.BigDecimal; importjava.text.DecimalFormat; importjava.text.NumberFormat; publicclassformat{ doublef=111231.5585; publicvoidm1(){ BigDecimalbg=newBigDecimal(f); doublef1=bg.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(f1); } /** *DecimalFormat转换最简便 */ publicvoidm2(){ DecimalFormatdf=newDecimalFormat("#.00"); System.out.println(df.format(f)); } /** *String.format打印最简便 */ publicvoidm3(){ System.out.println(String.format("%.2f",f)); } publicvoidm4(){ NumberFormatnf=NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); System.out.println(nf.format(f)); } publicstaticvoidmain(String[]args){ formatf=newformat(); f.m1(); f.m2(); f.m3(); f.m4(); } }
2.输出结果:
111231.56
111231.56
111231.56
111,231.56
这里我们提供了一个工具类,定义浮点数的加、减、乘、除和四舍五入等运算方法。以供参考。
源文件MathExtend.java:
importjava.math.BigDecimal; publicclassMathExtend { //默认除法运算精度 privatestaticfinalintDEFAULT_DIV_SCALE=10; /** *提供精确的加法运算。 *@paramv1 *@paramv2 *@return两个参数的和 */ publicstaticdoubleadd(doublev1,doublev2) { BigDecimalb1=newBigDecimal(Double.toString(v1)); BigDecimalb2=newBigDecimal(Double.toString(v2)); returnb1.add(b2).doubleValue(); } /** *提供精确的加法运算 *@paramv1 *@paramv2 *@return两个参数数学加和,以字符串格式返回 */ publicstaticStringadd(Stringv1,Stringv2) { BigDecimalb1=newBigDecimal(v1); BigDecimalb2=newBigDecimal(v2); returnb1.add(b2).toString(); } /** *提供精确的减法运算。 *@paramv1 *@paramv2 *@return两个参数的差 */ publicstaticdoublesubtract(doublev1,doublev2) { BigDecimalb1=newBigDecimal(Double.toString(v1)); BigDecimalb2=newBigDecimal(Double.toString(v2)); returnb1.subtract(b2).doubleValue(); } /** *提供精确的减法运算 *@paramv1 *@paramv2 *@return两个参数数学差,以字符串格式返回 */ publicstaticStringsubtract(Stringv1,Stringv2) { BigDecimalb1=newBigDecimal(v1); BigDecimalb2=newBigDecimal(v2); returnb1.subtract(b2).toString(); } /** *提供精确的乘法运算。 *@paramv1 *@paramv2 *@return两个参数的积 */ publicstaticdoublemultiply(doublev1,doublev2) { BigDecimalb1=newBigDecimal(Double.toString(v1)); BigDecimalb2=newBigDecimal(Double.toString(v2)); returnb1.multiply(b2).doubleValue(); } /** *提供精确的乘法运算 *@paramv1 *@paramv2 *@return两个参数的数学积,以字符串格式返回 */ publicstaticStringmultiply(Stringv1,Stringv2) { BigDecimalb1=newBigDecimal(v1); BigDecimalb2=newBigDecimal(v2); returnb1.multiply(b2).toString(); } /** *提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 *小数点以后10位,以后的数字四舍五入,舍入模式采用ROUND_HALF_EVEN *@paramv1 *@paramv2 *@return两个参数的商 */ publicstaticdoubledivide(doublev1,doublev2) { returndivide(v1,v2,DEFAULT_DIV_SCALE); } /** *提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 *定精度,以后的数字四舍五入。舍入模式采用ROUND_HALF_EVEN *@paramv1 *@paramv2 *@paramscale表示需要精确到小数点以后几位。 *@return两个参数的商 */ publicstaticdoubledivide(doublev1,doublev2,intscale) { returndivide(v1,v2,scale,BigDecimal.ROUND_HALF_EVEN); } /** *提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 *定精度,以后的数字四舍五入。舍入模式采用用户指定舍入模式 *@paramv1 *@paramv2 *@paramscale表示需要精确到小数点以后几位 *@paramround_mode表示用户指定的舍入模式 *@return两个参数的商 */ publicstaticdoubledivide(doublev1,doublev2,intscale,intround_mode){ if(scale<0) { thrownewIllegalArgumentException("Thescalemustbeapositiveintegerorzero"); } BigDecimalb1=newBigDecimal(Double.toString(v1)); BigDecimalb2=newBigDecimal(Double.toString(v2)); returnb1.divide(b2,scale,round_mode).doubleValue(); } /** *提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 *小数点以后10位,以后的数字四舍五入,舍入模式采用ROUND_HALF_EVEN *@paramv1 *@paramv2 *@return两个参数的商,以字符串格式返回 */ publicstaticStringdivide(Stringv1,Stringv2) { returndivide(v1,v2,DEFAULT_DIV_SCALE); } /** *提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 *定精度,以后的数字四舍五入。舍入模式采用ROUND_HALF_EVEN *@paramv1 *@paramv2 *@paramscale表示需要精确到小数点以后几位 *@return两个参数的商,以字符串格式返回 */ publicstaticStringdivide(Stringv1,Stringv2,intscale) { returndivide(v1,v2,DEFAULT_DIV_SCALE,BigDecimal.ROUND_HALF_EVEN); } /** *提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 *定精度,以后的数字四舍五入。舍入模式采用用户指定舍入模式 *@paramv1 *@paramv2 *@paramscale表示需要精确到小数点以后几位 *@paramround_mode表示用户指定的舍入模式 *@return两个参数的商,以字符串格式返回 */ publicstaticStringdivide(Stringv1,Stringv2,intscale,intround_mode) { if(scale<0) { thrownewIllegalArgumentException("Thescalemustbeapositiveintegerorzero"); } BigDecimalb1=newBigDecimal(v1); BigDecimalb2=newBigDecimal(v2); returnb1.divide(b2,scale,round_mode).toString(); } /** *提供精确的小数位四舍五入处理,舍入模式采用ROUND_HALF_EVEN *@paramv需要四舍五入的数字 *@paramscale小数点后保留几位 *@return四舍五入后的结果 */ publicstaticdoubleround(doublev,intscale) { returnround(v,scale,BigDecimal.ROUND_HALF_EVEN); } /** *提供精确的小数位四舍五入处理 *@paramv需要四舍五入的数字 *@paramscale小数点后保留几位 *@paramround_mode指定的舍入模式 *@return四舍五入后的结果 */ publicstaticdoubleround(doublev,intscale,intround_mode) { if(scale<0) { thrownewIllegalArgumentException("Thescalemustbeapositiveintegerorzero"); } BigDecimalb=newBigDecimal(Double.toString(v)); returnb.setScale(scale,round_mode).doubleValue(); } /** *提供精确的小数位四舍五入处理,舍入模式采用ROUND_HALF_EVEN *@paramv需要四舍五入的数字 *@paramscale小数点后保留几位 *@return四舍五入后的结果,以字符串格式返回 */ publicstaticStringround(Stringv,intscale) { returnround(v,scale,BigDecimal.ROUND_HALF_EVEN); } /** *提供精确的小数位四舍五入处理 *@paramv需要四舍五入的数字 *@paramscale小数点后保留几位 *@paramround_mode指定的舍入模式 *@return四舍五入后的结果,以字符串格式返回 */ publicstaticStringround(Stringv,intscale,intround_mode) { if(scale<0) { thrownewIllegalArgumentException("Thescalemustbeapositiveintegerorzero"); } BigDecimalb=newBigDecimal(v); returnb.setScale(scale,round_mode).toString(); } }