BigDecimal.ROUND_HALF_UP 和 BigDecimal.ROUND_HALF_DOWN的正确用法

2023-11-09 03:30

本文主要是介绍BigDecimal.ROUND_HALF_UP 和 BigDecimal.ROUND_HALF_DOWN的正确用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

      最近看到项目中有涉及到价格计算的代码,其中有用到BigDecimal.ROUND_HALF_UP和BigDecimal.ROUND_HALF_DOWN,这两种舍入方式我以前很少用,带着诸多疑问,我就去网上找了找对应的资料,发现有很多资料都不是完全正确的,于是就有了这篇博客。

解释:

  • BigDecimal.ROUND_HALF_UP: 保留精度的后一位如果大于等于5,则往前进一位, 否则舍弃(即通常所说的四舍五入)。
  • BigDecimal.ROUND_HALF_DOWN: 保留精度的后一位如果小于等于5,进行舍弃,否则进一位。
示例:
import java.math.BigDecimal;public class BIgDecimalTest {public static void main(String[] args) {// 最好用String,否则会出现结果不准确的问题BigDecimal bigDecimal = new BigDecimal("3.555");// 保留精度的后一位(这里是5)如果大于等于5,则往前进一位, 否则舍弃(即通常所说的四舍五入)System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP));// 保留精度的后一位(这里是5)如果小于等于5,进行舍弃,否则往进一位System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_DOWN));System.out.println("------------------");BigDecimal bigDecimal2 = new BigDecimal("3.556");// 最好用String,否则会出现结果不准确的问题// 保留精度的后一位(这里是6)如果大于5,则往前进一位,否则舍弃(即通常所说的四舍五入)System.out.println(bigDecimal2.setScale(2, BigDecimal.ROUND_HALF_UP));// 保留精度的后一位(这里是6)如果小于等于5,进行舍弃,否则往进一位System.out.println(bigDecimal2.setScale(2, BigDecimal.ROUND_HALF_DOWN));System.out.println("------------------");}
}
结果:

在这里插入图片描述

这篇关于BigDecimal.ROUND_HALF_UP 和 BigDecimal.ROUND_HALF_DOWN的正确用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/373819

相关文章

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

UVM:callback机制的意义和用法

1. 作用         Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。 2. 使用步骤         (1)在UVM组件中内嵌callback函

这些ES6用法你都会吗?

一 关于取值 取值在程序中非常常见,比如从对象obj中取值 const obj = {a:1b:2c:3d:4} 吐槽: const a = obj.a;const b = obj.b;const c = obj.c;//或者const f = obj.a + obj.b;const g = obj.c + obj.d; 改进:用ES6解构赋值

Java - BigDecimal 计算分位(百分位)

日常开发中,如果使用数据库来直接查询一组数据的分位数,就比较简单,直接使用对应的函数就可以了,例如:         PERCENT_RANK() OVER(PARTITION BY 分组列名 ORDER BY 目标列名) AS 目标列名_分位数         如果是需要在代码逻辑部分进行分位数的计算,就需要我们自己写一个工具类来支持计算了 import static ja