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- ...
随机推荐
- An Unfair Game-[ACdream1035]
Problem Description There are n people and n target, everyone should get one target, no two people g ...
- JAVA的自动装箱拆箱
转自:http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html 蛋呢 的空间 ??什么是自动装箱拆箱 基本数据类型的自动装箱(a ...
- Webpack打包进阶
说在前面 由于使用了React直出,页面各项性能指标使人悦目.本篇将深入探讨目前PC部落所采用webpack打包优化策略,以及探讨PC部落并未使用的 webpack Code Splitting 代码 ...
- Android ListView item项 显示动画
(1)使用LayoutAnimation 所谓的布局动画,其实就是为ViewGroup添加显示动画效果,主要用过LayoutAnimationController来控制实现.LayoutAnimati ...
- 【noiOJ】p1481
1481:Maximum sum 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 Given a set of n integers: A={a1, a2,. ...
- Android --RatingBar的使用
1.效果图
- C语言(1)
认知C语言 计算机有很多的语言,现在要学习的C语言便是一种.下面便是一个基本的框架: #include <stdio.h> #include <stdlib.h> int ma ...
- Centos 下面升级系统内核(转)
1.导入public key 1 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 2.安装ELRepo到CentOS 6. ...
- DataContractJsonSerializer deserialize stream
var response = await httpClient.PostAsync(endpoint, new FormUrlEncodedContent(parameters)); var resu ...
- gerrit使用教程
注:使用时把“user”替换为自己的账号,例如 ueapp: ssh://huang.fei@10.0.64.16:29418/jonet2_0_app_ueapp.git 新的环境下需要先注册g ...