欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java指定保留小数位数的方法

程序员文章站 2024-03-05 13:12:42
今天项目中需要更改时长的显示方式,规定必须保留两位小数,刚才看简书的时候正好看到一个指定保留小数位数的工具类的文章,在此基础上,做了一点小修改,用起来更加方便了,有需要的朋...

今天项目中需要更改时长的显示方式,规定必须保留两位小数,刚才看简书的时候正好看到一个指定保留小数位数的工具类的文章,在此基础上,做了一点小修改,用起来更加方便了,有需要的朋友尽管撸走

decimalutils 类:

import java.math.bigdecimal;
import java.math.roundingmode;
import java.text.decimalformat;

/**
 * created by sean on 17/3/10.
 */

public class decimalutils {

  /**
   * 按四舍五入保留指定小数位数,位数不够用0补充
   * @param o 格式化前的小数
   * @param newscale 保留小数位数
   * @return 格式化后的小数
   */
  public static string formatdecimalwithzero(object o, int newscale) {
    return string.format("%." + newscale + "f", o);
  }

  /**
   * 按四舍五入保留指定小数位数,位数不够用0补充
   * @param d 格式化前的小数
   * @param newscale 保留小数位数
   * @return 格式化后的小数
   */
  public static string formatdecimalwithzero(double d, int newscale) {
    string pattern = "0.";
    for (int i = 0; i < newscale; i++) {
      pattern += "0";
    }
    decimalformat df = new decimalformat(pattern);
    return df.format(d);
  }

  /**
   * 按四舍五入保留指定小数位数,位数不够用0补充
   * @param d 格式化前的小数 string形式
   * @param newscale 保留小数位数
   * @return 格式化后的小数
   */
  public static string formatdecimalwithzero(string d, int newscale) {
    string pattern = "0.";
    for (int i = 0; i < newscale; i++) {
      pattern += "0";
    }
    decimalformat df = new decimalformat(pattern);
    return df.format(double.valueof(d));
  }

  /**
   * 按四舍五入保留指定小数位数,小数点后仅保留有效位数
   * @param d 格式化前的小数
   * @param newscale 保留小数位数
   * @return 格式化后的小数
   */
  public static string formatdecimal(double d, int newscale) {
    string pattern = "#.";
    for (int i = 0; i < newscale; i++) {
      pattern += "#";
    }
    decimalformat df = new decimalformat(pattern);
    return df.format(d);
  }

  /**
   * 按四舍五入保留指定小数位数,小数点后仅保留有效位数
   * @param d 格式化前的小数
   * @param newscale 保留小数位数
   * @return 格式化后的小数
   */
  public static string formatdecimal(string d, int newscale) {
    string pattern = "#.";
    for (int i = 0; i < newscale; i++) {
      pattern += "#";
    }
    decimalformat df = new decimalformat(pattern);
    return df.format(double.valueof(d));
  }

  /**
   * 按指定舍入模式保留指定小数位数
   * @param d 格式化前的小数
   * @param newscale 保留小数位数
   * @param roundingmode 舍入模式
   *    (roundingmode.up始终进一/down直接舍弃/
   *     ceiling正进负舍/floor正舍负进/
   *     half_up四舍五入/half_down五舍六进/
   *     half_even银行家舍入法/unnecessary抛出异常)
   * @return 格式化后的小数
   */
  public static double formatdecimal(double d, int newscale, roundingmode roundingmode) {
    bigdecimal bd = new bigdecimal(d).setscale(newscale, roundingmode);
    return bd.doublevalue();
  }

  /**
   * 按指定舍入模式保留指定小数位数
   * @param d 格式化前的小数
   * @param newscale 保留小数位数
   * @param roundingmode 舍入模式
   *    (roundingmode.up始终进一/down直接舍弃/
   *     ceiling正进负舍/floor正舍负进/
   *     half_up四舍五入/half_down五舍六进/
   *     half_even银行家舍入法/unnecessary抛出异常)
   * @return 格式化后的小数
   */
  public static double formatdecimal(string d, int newscale, roundingmode roundingmode) {
    bigdecimal bd = new bigdecimal(double.valueof(d)).setscale(newscale, roundingmode);
    return bd.doublevalue();
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。