java 保留两位小数的几种方法

1.代码:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class format {
 double f = 111231.5585;
 public void m1() {
  BigDecimal bg = new BigDecimal(f);
  double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  System.out.println(f1);
 }
 /**
  * DecimalFormat转换最简便
  */
 public void m2() {
  DecimalFormat df = new DecimalFormat("#.00");
  System.out.println(df.format(f));
 }
 /**
  * String.format打印最简便
  */
 public void m3() {
  System.out.println(String.format("%.2f", f));
 }
 public void m4() {
  NumberFormat nf = NumberFormat.getNumberInstance();
  nf.setMaximumFractionDigits(2);
  System.out.println(nf.format(f));
 }
 public static void main(String[] args) {
  format f = new format();
  f.m1();
  f.m2();
  f.m3();
  f.m4();
 }
}

2.输出结果:

111231.56
111231.56
111231.56
111,231.56

这里我们提供了一个工具类,定义浮点数的加、减、乘、除和四舍五入等运算方法。以供参考。

源文件MathExtend.java:


import java.math.BigDecimal;

public class MathExtend

{

 //默认除法运算精度

 private static final int DEFAULT_DIV_SCALE = 10;

 /**

 * 提供精确的加法运算。

 * @param v1

 * @param v2

 * @return 两个参数的和

 */

 public static double add(double v1, double v2)

 {

   BigDecimal b1 = new BigDecimal(Double.toString(v1));

   BigDecimal b2 = new BigDecimal(Double.toString(v2));

   return b1.add(b2).doubleValue();

 }

 /**

  * 提供精确的加法运算

  * @param v1 

  * @param v2

  * @return 两个参数数学加和,以字符串格式返回

  */

 public static String add(String v1, String v2)

 {

   BigDecimal b1 = new BigDecimal(v1);

   BigDecimal b2 = new BigDecimal(v2);

   return b1.add(b2).toString();

 }

 /**

 * 提供精确的减法运算。

 * @param v1

 * @param v2

 * @return 两个参数的差

 */

 public static double subtract(double v1, double v2)

 {

   BigDecimal b1 = new BigDecimal(Double.toString(v1));

   BigDecimal b2 = new BigDecimal(Double.toString(v2));

   return b1.subtract(b2).doubleValue();

 }

 /**

  * 提供精确的减法运算

  * @param v1

  * @param v2

  * @return 两个参数数学差,以字符串格式返回

  */

 public static String subtract(String v1, String v2)

 {

   BigDecimal b1 = new BigDecimal(v1);

   BigDecimal b2 = new BigDecimal(v2);

   return b1.subtract(b2).toString();

 }

 /**

 * 提供精确的乘法运算。

 * @param v1

 * @param v2

 * @return 两个参数的积

 */

 public static double multiply(double v1, double v2)

 {

   BigDecimal b1 = new BigDecimal(Double.toString(v1));

   BigDecimal b2 = new BigDecimal(Double.toString(v2));

   return b1.multiply(b2).doubleValue();

 }

 /**

  * 提供精确的乘法运算

  * @param v1

  * @param v2

  * @return 两个参数的数学积,以字符串格式返回

  */

 public static String multiply(String v1, String v2)

 {

   BigDecimal b1 = new BigDecimal(v1);

   BigDecimal b2 = new BigDecimal(v2);

   return b1.multiply(b2).toString();

 }

 /**

 * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到

 * 小数点以后10位,以后的数字四舍五入,舍入模式采用ROUND_HALF_EVEN

 * @param v1

 * @param v2

 * @return 两个参数的商

 */

 public static double divide(double v1, double v2)

 {

   return divide(v1, v2, DEFAULT_DIV_SCALE);

 }

 /**

  * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指

  * 定精度,以后的数字四舍五入。舍入模式采用ROUND_HALF_EVEN

  * @param v1

  * @param v2

  * @param scale 表示需要精确到小数点以后几位。

  * @return 两个参数的商

  */

 public static double divide(double v1,double v2, int scale)

 {

   return divide(v1, v2, scale, BigDecimal.ROUND_HALF_EVEN);

 }

 /**

  * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指

  * 定精度,以后的数字四舍五入。舍入模式采用用户指定舍入模式

  * @param v1

  * @param v2

  * @param scale 表示需要精确到小数点以后几位

  * @param round_mode 表示用户指定的舍入模式

  * @return 两个参数的商

  */

 public static double divide(double v1,double v2,int scale, int round_mode){

     if(scale < 0)

     {

       throw new IllegalArgumentException("The scale must be a positive integer or zero");

     }

     BigDecimal b1 = new BigDecimal(Double.toString(v1));

     BigDecimal b2 = new BigDecimal(Double.toString(v2));

     return b1.divide(b2, scale, round_mode).doubleValue();

 }

 /**

  * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到

  * 小数点以后10位,以后的数字四舍五入,舍入模式采用ROUND_HALF_EVEN

  * @param v1

  * @param v2

  * @return 两个参数的商,以字符串格式返回

  */

 public static String divide(String v1, String v2)

 {

   return divide(v1, v2, DEFAULT_DIV_SCALE);

 }

 /**

  * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指

  * 定精度,以后的数字四舍五入。舍入模式采用ROUND_HALF_EVEN

  * @param v1

  * @param v2

  * @param scale 表示需要精确到小数点以后几位

  * @return 两个参数的商,以字符串格式返回

  */

 public static String divide(String v1, String v2, int scale)

 {

   return divide(v1, v2, DEFAULT_DIV_SCALE, BigDecimal.ROUND_HALF_EVEN);

 }

 /**

  * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指

  * 定精度,以后的数字四舍五入。舍入模式采用用户指定舍入模式

  * @param v1

  * @param v2

  * @param scale 表示需要精确到小数点以后几位

  * @param round_mode 表示用户指定的舍入模式

  * @return 两个参数的商,以字符串格式返回

  */

 public static String divide(String v1, String v2, int scale, int round_mode)

 {

   if(scale < 0)

   {

     throw new IllegalArgumentException("The scale must be a positive integer or zero");

   }

   BigDecimal b1 = new BigDecimal(v1);

   BigDecimal b2 = new BigDecimal(v2);

   return b1.divide(b2, scale, round_mode).toString();

 }

 /**

  * 提供精确的小数位四舍五入处理,舍入模式采用ROUND_HALF_EVEN

  * @param v 需要四舍五入的数字

  * @param scale 小数点后保留几位

  * @return 四舍五入后的结果

  */

 public static double round(double v,int scale)

 {

   return round(v, scale, BigDecimal.ROUND_HALF_EVEN);

 }

 /**

  * 提供精确的小数位四舍五入处理

  * @param v 需要四舍五入的数字

  * @param scale 小数点后保留几位

  * @param round_mode 指定的舍入模式

  * @return 四舍五入后的结果

  */

 public static double round(double v, int scale, int round_mode)

 {

   if(scale<0)

   {

     throw new IllegalArgumentException("The scale must be a positive integer or zero");

   }

   BigDecimal b = new BigDecimal(Double.toString(v));

   return b.setScale(scale, round_mode).doubleValue();

 }

 /**

  * 提供精确的小数位四舍五入处理,舍入模式采用ROUND_HALF_EVEN

  * @param v 需要四舍五入的数字

  * @param scale 小数点后保留几位

  * @return 四舍五入后的结果,以字符串格式返回

  */

 public static String round(String v, int scale)

 {

  return round(v, scale, BigDecimal.ROUND_HALF_EVEN);

 }

 /**

  * 提供精确的小数位四舍五入处理

  * @param v 需要四舍五入的数字

  * @param scale 小数点后保留几位

  * @param round_mode 指定的舍入模式

  * @return 四舍五入后的结果,以字符串格式返回

  */

 public static String round(String v, int scale, int round_mode)

 {

   if(scale<0)

   {

     throw new IllegalArgumentException("The scale must be a positive integer or zero");

   }

   BigDecimal b = new BigDecimal(v);

   return b.setScale(scale, round_mode).toString();

 }

}
(0)

相关推荐

  • java使double保留两位小数的多方法 java保留两位小数

    复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    df   = new DecimalFormat("######0.00"); double d1 = 3.23456  double d2 = 0.0;double d3 = 2.0;df.format(d1); df.format(d2); df.format(d3); 3个结果分别为: 复制代码 代码如下: 3.230.00 2.00 java保留两位小数问题:

  • java、freemarker保留两位小数

     一.Java保留2位小数 double acc = 22.4322; String accX = String.format("%.2f", acc); 二.freemarker保留两位小数 <#if centerFreeSize??> ${centerFreeSize?string("#.##")} <#else> 0.00 </#if> 补充:freemarker保留小数 freemarker保留两位小数 方法一 #{num

  • Java保留两位小数的实现方法

     Java保留两位小数的实现方法 采用四舍五入的方式 : 该方式来自网络 import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class format { double f = 111231.5585; public void m1() { BigDecimal bg = new BigDecimal(f); double f1 = bg.setSca

  • Java保留两位小数的几种写法总结

    本文列举了几个方法: 1. 使用java.math.BigDecimal 2. 使用java.text.DecimalFormat 3. 使用java.text.NumberFormat 4. 使用java.util.Formatter 5. 使用String.format 文章末尾给大家分享了更多的拓展知识,另外可以自己实现或者借用封装好的类库来实现,在这篇文章中就不一一列举了. 下面来看看详细的介绍. 一.使用BigDecimal,保留小数点后两位 public static String

  • java 保留两位小数的几种方法

    1.代码: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class format { double f = 111231.5585; public void m1() { BigDecimal bg = new BigDecimal(f); double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP)

  • Java强制保留两位小数的四种方法案例详解

    方法一:String的format方法(推荐) double f = 111231.5585; System.out.println(String.format("%.2f", f)); 方法二:DecimalFormat的format方法 double f = 111231.5585; DecimalFormat df = new DecimalFormat("#.00"); System.out.println(df.format(f)); 以下内容了解即可,可

  • 浅谈Java中浮点型数据保留两位小数的四种方法

    目录 一.String类的方式 二.DecimalFormat类 三.BigDecimal类进行数据处理 四.NumberFormat类进行数据处理 总结一下 今天在进行开发的过程中遇到了一个小问题,是关于如何将double类型的数据保留两位小数.突然发现这方面有一点欠缺,就来总结一下. 一.String类的方式 该方式是是使用String的format()方法来实现的,该方法的作用就是规范数据的格式,第一个参数传入一个字符串来表示输出的数据格式,如保留两位小数就使用"%.2f",第二

  • PHP保留两位小数的几种方法

    代码如下所示: $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2); //10.46 //第二种:利用sprintf格式化字符串 $format_num = sprintf("%.2f",$num); echo $format_num; //10.46 //第三种:利用千位分组来格式化数字的函数number_format() echo number_format($num, 2); //10.46 //或者如下 ec

  • Java中保留两位小数的四种方法实现实例

    在写程序的时候,有时候可能需要设置小数的位数,那么java中有哪几种保留小数位数的方法呢?本文以两位小数为例给出四种方法. package CodeJava_Leet; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; /** * Created by Yechengpeng on 2016-08-14. */ public class Test { public

  • Vue toFixed保留两位小数的3种方式

    第一种: 直接写在js里面,这是最简单的 val.toFixed(2) 第二种: 在ElementUi表格中使用 第三种: 在取值符号中使用 {{}} 定义一个方法 towNumber(val) { return val.toFixed(2) } 使用 {{ towNumber(row.equiValue) }} 补充知识:vue中提示toFixed不是函数 vue中toFixed获取小数点后两位 错误提示: .toFixed is not a function 解决办法: Number(_th

  • vue 保留两位小数 不能直接用toFixed(2) 的解决

    用vue做项目的时候多多少少都会遇到这个问题 刚开始我是用toFixed()这个方法来写的 效果是有的 但是控制台一直是红红的围绕着我 突然想到 vue和jquery混搭 的 问题 于是乎 看了一下vue的开发文档 发现过滤器这个东东 并且可以自定义过滤器 js代码 html代码 虽然方法是这样的 但是在写的过程中还有页面上有效果 但是控制台一直红红的 于是我又仔细的看了一下文档 发现我没有把value转为Number类型 我上面放的直接是写好的代码 放心使用 ! 我写的是局部的过滤器 你如果很

随机推荐