Android开发:四舍五入BigDecimal.ROUND_HALF_XXX的各种用法

详解BigDecimal及其加减乘除运算 目录 一、BigDecimal概述 二、构造函数详解 1、BigDecimal(int val) 2、BigDecimal(intval, MathContextmc) 3、BigDecimal(longval) 4、BigDecimal(longval, MathContextmc) 5、BigDecimal(BigIntegerval) 6、BigDecima... 阅读详情

 

/**
 * 四舍五入算法
 *
 * @param str   输入值
 * @param scale 精度,保留几位小数 0, 1 ,2 , 3.....
 * @return 返回值
 */
public static double roundHalfUp(String str, int scale) {
    if (TextUtil.isEmpty(str)) {
        return 0;
    }
    if (!isNum(str)) {
        return 0;
    }
    BigDecimal decimal = new BigDecimal(str);
    return decimal.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}

 

在银行、帐户、计费等领域,BigDecimal提供了精确的数值计算。其中8种舍入方式值得掌握。

1、ROUND_UP

舍入远离零的舍入模式。

在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。

注意,此舍入模式始终不会减少计算值的大小。

2、ROUND_DOWN

接近零的舍入模式。

在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。

注意,此舍入模式始终不会增加计算值的大小。

3、ROUND_CEILING

接近正无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;

如果为负,则舍入行为与 ROUND_DOWN 相同。

注意,此舍入模式始终不会减少计算值。

4、ROUND_FLOOR

接近负无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;

如果为负,则舍入行为与 ROUND_UP 相同。

注意,此舍入模式始终不会增加计算值。

5、ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。

注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

6、ROUND_HALF_DOWN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。

7、ROUND_HALF_EVEN    银行家舍入法

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;

如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。

如果前一位为奇数,则入位,否则舍去。

以下例子为保留小数点1位,那么这种舍入方式下的结果。

1.15>1.2 1.25>1.2

8、ROUND_UNNECESSARY

断言请求的操作具有精确的结果,因此不需要舍入。

如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

 

 

关于BigDecimal 的加减乘除计算 因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。四舍六入,五分两种情况。 阅读详情

相关推荐

【小积累】BigDecimal加减乘除

写在前面,BigDecimal的初始化也需要注意。为了避免精度损失,建议使用字符串形式来初始化BigDecimal对象。例如,使用new BigDecimal("0.005")而不是new BiqDecimal(0.005),

DreamDlee的博客 2408

BigDecimal加减乘除计算

BigDecimal的运算——加减乘除 首先是bigdecimal的初始化 这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示 我们对其进行加减乘除绝对值的运算,其实就是Bigdecimal的类的一些调用 BigDecimal num1 = new BigDecimal(0.005); BigDecimal num2 = new BigDecimal(1000000); BigDecimal num3 = new BigDecimal(-1000000); //尽

weixin_49562132的博客 7万+

Centos7.9上安装glibc2.28遇到/usr/bin/ld: cannot find -lnss_test2问题

Centos7.9安装glic2.28遇到-lnss_test2问题及解决方案。

freflying1119的博客 2898

BigDecimal 加减乘除 | 比较大小 | 取最大最小值 | 保留小数位 | 附上计算工具类

个人记录:最近用BigDecimal比较多,对精度要求高,记录一下 BigDecimal 加减乘除 | 比较大小 | 取最大最小值 | 保留小数 一、加减乘除 BigDecimal num1 = new BigDecimal(2); BigDecimal num2 = new BigDecimal(6); BigDecimal num3 = null; -- 加 2+6 num3 =...

慌途L 5万+

Ansys Zemax实战:5步搞定衍射光学元件(DOE)设计,附赠超透镜(metalens)避坑指南

本文详细介绍了使用Ansys Zemax进行衍射光学元件(DOE)和超透镜(metalens)设计的5步实战流程。从基础光学系统搭建到相位面设计验证,再到制造准备与实测对比,全面解析了OpticStudio中的关键技巧和常见避坑指南,帮助工程师高效完成复杂光学元件设计。

orange的博客 618

PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)

该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用。实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改。 AXI_CDMA特性: 如果是使用ZYNQ 7系列芯片(可能其他Xilinx也是通用的),xilinx的AXI_CDMA 核有两种传输模式:轮询(poll)和中断(...

YGLeeeon的博客 3521

Android的BigDecimal.ROUND_DOWN是什么意思?

Android的BigDecimal.ROUND_DOWN是什么意思?

qq_36570506的博客 2317

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1359

bigdecimal加减乘除运算方法

divide()方法将当前BigDecimal对象除以divisor,并返回一个新的BigDecimal对象,表示它们的商。而BigDecimal可以避免这种情况的发生,因此在需要高精度计算的场合,使用BigDecimal是非常合适的。subtract()方法将subtrahend从当前BigDecimal对象中减去,并返回一个新的BigDecimal对象,表示它们的差。add()方法将augend与当前BigDecimal对象相加,并返回一个新的BigDecimal对象,表示它们的和。

showerin的博客 2万+

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 352

2025年7月5日全国青少年信息素养大赛Python编程初中组复赛真题+答案解析

2025年7月5日全国青少年信息素养大赛Python编程初中组复赛真题+答案解析

伶俐角少儿编程 464

BigDecimal计算(加减乘除)

BigDecimal加法,BigDecimal减法,BigDecimal乘法,BigDecimal除法,BigDecimal计算

nbzhaomao的博客 6万+

【AUTOSAR SystemServices】AUTOSAR CP中Watchdog Manager模块技术解析

本文深入解析了AUTOSAR中的Watchdog Manager模块实现。该模块通过多层次监督机制(Alive/Deadline/Logical Supervision)确保系统安全运行,具备动态模式切换和分级故障处理能力。 关键实现包括: 数据结构设计:包含监督实体状态结构体(实时状态维护)、监督配置结构体(支持模式切换)和全局状态信息(系统级监控) 核心流程优化:初始化采用事务性设计,检查点处理通过条件编译优化,主监控循环采用流水线式并行处理 监督机制实现:Alive监督采用滑动窗口算法,Deadlin

1038

BigDecimal类型加减乘除运算(Java必备知识)

在现实开发当中经常会遇到这种计算,这里特此整理一下为方便以后学习,希望能帮助到其他的萌新。 为什么要用BigDecimal计算? 因为 float, double等浮点的存储和操作(比如:相加,相减…)存在误差(7.22f - 7.0f = 0.21999979 而不是 0.22)。 浮点计算误差产生的原因 将十进制数转为二进制,在计算机运行中本就存在误差 来看一个例子:将十进制的0.2转化为二进制,按照乘二取整法 0.2 * 2 = 0.4 0 0.4 * 2 = 0.8 0 0.8 *

怪咖@的博客 4万+

财务惊呼“不可能”!Python 自动识别 PDF 发票,数据秒级录入系统

电子发票(原生 PDF):这种最爽,文字是可以选中的。我们用 PyPDF2 直接提取文本,速度快,准确率 100%。 纸质扫描/拍照发票:这种是图片。必须上 OCR(光学字符识别)。我们要用百度开源的 PaddleOCR,这是目前中文识别效果最好的开源库之一,吊打早已过气的 Tesseract。

BUG猿的博客 1024

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java中BigDecimal的使用:加减乘除、四舍五入、比较大小、资金统计

Java在 java.math 包中提供的API类 BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象

pan_junbiao的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java BigDecimal的基本使用方法

1、对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类 2、运算速度比一般的+、-、*、/要快 3、基本方 法描 述  add(BigDecimal)BigDecimal对象中的值相加,然后返回这个对象。  subtract(BigDecima

qdgengwenfei的专栏 9852

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

BigDecimal加减乘除运算

BigDecimal作为涉及到钱或者有小数点要求时经常用到的数据类型拥有其特殊的地方,在加减乘除运算上与Integer类型不同。 【1】BigDecimal变量定义及赋值 一般的变量定义是:类型 变量名称=变量值。 但是BigDecimal的赋值是不同的,BigDecimal赋值是 BigDecimal money= new BigDecimal(100);或者BigDecimal m...

韩迎宾的博客 5万+

BigDecimal(加减乘除)运算

BigDecimal常规运算

qh0201_的博客 3425

BigDecimal的加 减 乘 除

BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5"); BigDecimal bignum3 = null; //加法 bignum3 = bignum1.add(bignum2); System.out.println("和 是:" + bignum3);

xqhys的博客 1018

BigDecimal大小比较

BigDecimal比较大小方法: 使用compareTo方法。 int flag = bigdemical1.compareTo(bigdemical2) flag = -1,表示bigdemical1小于bigdemical2; flag = 0,表示bigdemical1等于bigdemical2; flag = 1,表示bigdemical1大于bigdemical2; 实际应用中直接跟0比较就可以了, 大于0就是bigdemical大于bigdemical1 等于0就是bigdemical等于b

wujian_csdn_csdn的博客 9万+

BigDecimal加减乘除

浮点数值不适用于无法接受舍入误差的计算当中,比如金融计算。例如,System.out.println(2.0-1.1)打印的结果为0.8999999999999999,而不是人们想象当中的0.9,这是为什么呢?因为System.out.println()中的数字默认是double类型的,而浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示小数0.1,因此产生了这种舍入误差。就像在十进制当中,无法精确地表示分数1/3一样。

z2742431760的博客 2217

bigdecimal类型比较大小

比较方法: BigDecimal类提供compareTo()方法来比较两个数的大小,例如:a = b返回0,a < b返回-1,a > b返回1,通过这三种比较返回的结果,我们还可``以比较a != b、a >= b和a<= b这三种情况。 import java.math.BigDecimal; public class Application { public static void main(String[] args) { BigDecimal a

dava_zhang的博客 2万+

BigDecimal基本加减乘除

BigDecimal加减乘除

qq_42390993的博客 2994

bigdecimal加减乘除运算

bigdecimal加减乘除运算

weixin_42258334的博客 3405
上一篇: Android开发:解决ScrollView嵌套ListView和GridView冲突的方法
下一篇: Android开发:TextView设置字体横向滚动
android157
博客等级 码龄9年 193粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值