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- ...
随机推荐
- Visual Studio: 暂时?绕过 fatal error C1083: Cannot open precompiled header file
可以使用右键点击项目工程中的该cpp文件,选择setting,在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头.
- storm源码之storm代码结构【译】【转】
[原]storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正 ...
- 在Web应用中接入微信支付的流程之极简清晰版 (转)
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- Leetcode Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- 洛谷 P1991 无线通讯网 Label:最小生成树 || 二分
题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...
- Google测试分享-测试经理
首先大家可以思考下,google的测试经理角色必须具备什么样的能力.据不完全统计,google的测试经理,超过一半之前都做过TE的角色(大家可以想想为啥):对于与被测产品相关的任何使用问题,测试经理都 ...
- URAL 1117. Hierarchy(DP)
题目链接 这破题,根本看不懂题意啊...题意:一棵中序遍历是1 2 3 4 5...的满二叉树,从a a+1 a+2 a+3 b,总共多少步.x到y的距离为中间有多少个点.a > b没注意2Y. ...
- linux系统下yum源的搭建
1.建立挂载点 系统默认在 /mnt目录 1>创建挂载点 mkdir -p /mnt/cdrom 参数-p是需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理 2>查看 ...
- Html5_禁止Html5在手机上屏幕页面缩放
最近测试html5页面,发现默认都允许用户缩放页面,或者在屏幕双击放大或缩小.即相当于这样设置 <meta name="viewport" content="wid ...
- ArcGIS 设置地图显示范围大小(全屏显示)
Arcmap的FullExtent默认是地图加载的时候的extent.其实这个fullExtent是可以设置的. 打开ArcMap,选择左边图例的Layers ,右键点击,选择“Properties. ...