Java学习-047-数值格式化及小数位数四舍五入
此小工具类主要用于数值四舍五入、数值格式化输出,很简单,若想深入研究,敬请自行查阅 BigDecimal 或 DecimalFormat 的 API,BigDecimal.setScale(位数,四舍五入法)中四舍五入法有如下 7 种:
1、 ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
2、 ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
3、 ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于ROUND_UP,若为负数,舍入行为类似于ROUND_DOWN。Math.round()方法就是使用的此模式。
4、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。
5、 HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。
6、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。
7、 HAIL_EVEN:银行家舍入法。
不多说,直接上码,如下所示:
/**
* Aaron.ffp Inc.
* Copyright (c) 2004-2016 All Rights Reserved.
*/
package cn.ffp.autotest.api.util; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat; import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator; import cn.ffp.autotest.api.settings.CONSINFO; /**
* <strong>计算工具类</strong><br>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-api cn.ffp.autotest.api.util MathUtil.java, 2016-04-12 17:51:58.301 Exp $
*/
public class MathUtil {
private static Logger logger = Logger.getLogger(MathUtil.class.getName());
private static String msg = ""; public MathUtil() {
DOMConfigurator.configure(CONSINFO.CONF_LOG4J_XML);
} /**
* <strong>对数值进行格式化输出</strong><br>
* <ul>
* <li>例如:format("2.23956", 3)的结果为:2.240</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-api cn.ffp.autotest.api.util MathUtil.java format, 2016-04-12 20:13:43.664 Exp $
*
* @param digit 待格式化数值
* @param scale 保留位数(小于1时为整数)
* @return 格式化数字字符串
*/
public static String format(double digit, int scale) {
String format = "#."; if (scale < 1) {
format = "#";
} for (int i = 0; i < scale; i++) {
format += "0";
} return MathUtil.format(digit, format);
} /**
* <strong>对数值进行格式化输出</strong><br>
* <ul>
* <li>格式化样式示例(#.00,表示保留2位;#.0000,表示保留4位)</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-api cn.ffp.autotest.api.util MathUtil.java format, 2016-04-12 19:44:00.926 Exp $
*
* @param digit 待格式化数值
* @param format 格式化样式
* @return 格式化数值字符串
*/
private static String format(double digit, String format) {
try {
DecimalFormat decimalFormat = new DecimalFormat(format); return decimalFormat.format(digit);
} catch (NullPointerException npe) {
msg = "将数字【" + digit + "】依据样式【" + format + "】格式化失败,原因:";
logger.error(msg, npe); return null;
} catch (IllegalArgumentException iae) {
msg = "将数字【" + digit + "】依据样式【" + format + "】格式化失败,原因:";
logger.error(msg, iae); return null;
}
} /**
* <strong>对数值进行四舍五入</strong><br>
* <ul>
* <li>采用银行家舍入法</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-api cn.ffp.autotest.api.util MathUtil.java scale, 2016-04-12 19:42:52.068 Exp $
*
* @param digit 数值
* @param scale 保留位数
* @return 四舍五入后的数值
*/
public static String scale(String digit, int scale) {
try {
if (scale < 0) {
msg = "对【" + digit + "】进行四舍五入失败,原因:指定位数【" + scale + "】不可小于0!请检查!";
logger.warn(msg); return null;
} return new BigDecimal(digit).setScale(scale, RoundingMode.HALF_EVEN).toString();
} catch (NumberFormatException nfe) {
msg = "获取【" + digit + "】指定位数【" + scale + "】四舍五入失败,原因:";
logger.error(msg, nfe);
} catch (ArithmeticException ae) {
msg = "获取【" + digit + "】指定位数【" + scale + "】四舍五入失败,原因:";
logger.error(msg, ae);
} return null;
}
}
对应测试源码:
package cn.ffp.autotest.api.util;
import org.testng.annotations.Test;
public class MathUtilTest {
@Test(description = "public static String format(double digit, int scale) --- 测试")
public void test_format() {
System.out.println("MathUtil.format(\"2.23956\", 3) \t " + MathUtil.format(2.23956, 3));
System.out.println("MathUtil.format(\"2.23956\", 0) \t " + MathUtil.format(2.23956, 0));
System.out.println("MathUtil.format(\"2.23956\", -34) \t " + MathUtil.format(2.23956, -34));
}
@Test(description = "public static String scale(String digit, int scale) --- 测试")
public void test_scale() {
System.out.println("MathUtil.scale(\"2.23956\", 3) \t " + MathUtil.scale("2.23956", 3));
System.out.println("MathUtil.scale(\"2.23956\", 0) \t " + MathUtil.scale("2.23956", 0));
System.out.println("MathUtil.scale(\"2.23956\", -3) \t " + MathUtil.scale("2.23956", -3));
}
}
至此, Java学习-047-数值格式化及小数位数四舍五入顺利完结,希望此文能够给初学 Java 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
Java学习-047-数值格式化及小数位数四舍五入的更多相关文章
- java如何获取一个double的小数位数
前言 看标题是不是觉得这是一个很简单的问题,我一开始也是这么认为的,但是实际情况下,在各种情况下我们都进行了测试,发现很多实际情况是无法不尽如人意的. 方法分析 当前能想到的比较容易有下面几种 1.直 ...
- Matlab修改数值格式/精度/小数位数
————————————命令行方法————————————— 直接在命令行中输入以下命令,但该命令不影响数据的存储形式和计算精度,下次还需进行修改. format 默认格式 format short ...
- Matlab怎么修改显示数值格式/精度/小数位数
参考:https://jingyan.baidu.com/article/7f41ecec1ad029593c095c70.html
- java.math.BigDecimal保留两位小数,保留小数,精确位数
http://blog.csdn.net/yuhua3272004/article/details/3075436 使用java.math.BigDecimal工具类实现 java保留两位小数问题 ...
- java中int相除取小数点后两位或限定位数
java 两个整数相除保留两位小数: http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html java中,当两个整数相除时,由于小数点以后的数字会被截 ...
- Java指定保留小数位数的方法
package com.qiyuan.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.tex ...
- java实验三——求平均数,数组排序(有关java保留小数位数,由于编译器版本未到1.5导致的报错format函数第二个参数不对,要求是Object[])
package hello; import java.util.Arrays; public class 实验三更正版 { public static void main(String[] args) ...
- 在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数)
//在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数) function formatNum(num ...
- openerp学习笔记 自定义小数精度(小数位数)
小数位数标识定义: lx_purchase/data/lx_purchase_data.xml <?xml version="1.0" encoding="utf- ...
随机推荐
- iOSDay27之界面通信
1. 属性传值(前面的界面给后面传值) 第一步: 在 SecondViewController.h 文件里定义一个存放传过来值的变量 contents #import <UIKit/UIKit. ...
- Android 蓝牙4.0 BLE
Android ble (Bluetooth Low Energy) 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用. BLE是蓝牙4.0的核心Profil ...
- CODEVS 1817 灾后重建 Label:Floyd || 最短瓶颈路
描述 灾后重建(rebuild) B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两 ...
- UVA 11609 - Teams(二项式系数)
题目链接 想了一会,应该是跟二项式系数有关系,无奈自己推的式子,构不成二项式的系数. 选1个人Cn1*1,选2个人Cn2*2....这样一搞,以为还要消项什么的... 搜了一下题解,先选队长Cn1,选 ...
- HDU 4750 Count The Pairs(并查集)
题目链接 没有发现那个点,无奈. #include <cstdio> #include <cstring> #include <cmath> #include &l ...
- Android --日期控件使用并显示选择的日期
1. main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...
- Linux之进程管理
==================================================================================================== ...
- Java_Java Compiler 应用实例
转自:http://hejiangtao.iteye.com/blog/1399122 一直在用JDK1.5, 一直搞不清楚JDK1.6有啥特性, 就翻了翻, 发现这个Compiler API(JSR ...
- 关于Android2.X系统自定义图片圆角BUG的解决
今天在做项目的时候遇到的一个问题. 预期的效果是这样的:
- HTML DOM随笔
编程接口 所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性. 方法是您能够执行的动作(比如添加或修改元素). 属性是您能够获取或设置的值(比如节点的名称或内容). getElemen ...