BigDecimal 的setScale 和movePointRight

网友投稿 280 2022-11-06

BigDecimal 的setScale 和movePointRight

BigDecimal.setScale主要用于对BigDecimal数据小数点后的位数进行 进位、舍位、截断等操作

BigDecimal使用说明

不建议,会造成精度损失

BigDecimal num1 = new BigDecimal(2.222222);

不建议,虽然不会损失精度

BigDecimal num2 = new BigDecimal(2);

建议,使用字符串格式构造,不会损失精度

BigDecimal num = new BigDecimal("2.222222");

BigDecimal Rounding Modes

1. ROUND_UP = 0

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_UP); System.out.println(b); //2.23 进位处理,不管后面数字的大小  2. ROUND_DOWN = 1BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_DOWN); System.out.println(b); //2.22 去掉多余的位数,不管后面数字的大小

3. ROUND_CEILING = 2

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_CEILING); System.out.println(b);//2.23 如果是正数,相当于BigDecimal.ROUND_UP  BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_CEILING); System.out.println(b);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN

4. ROUND_FLOOR = 3

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_FLOOR); System.out.println(b);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN  BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_FLOOR); System.out.println(b);//-2.23 如果是负数,相当于BigDecimal.ROUND_HALF_UP

5. ROUND_HALF_UP = 4

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("ROUND_HALF_UP" + b); //2.22 根据后面的数字四舍五入(大于等于 5进位)

s

6. ROUND_HALF_DOWN = 5

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_DOWN); System.out.println("ROUND_HALF_DOWN" + b);//2.22 根据后面的数字四舍五入(大于 5进位)

7. ROUND_HALF_EVEN = 6

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN); System.out.println(b);//2.22 如果舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN  BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN); System.out.println(b);//2.22 如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP

8. ROUND_UNNECESSARY = 7

BigDecimal b = new BigDecimal("2.22").setScale(3, BigDecimal.ROUND_UNNECESSARY); System.out.println(b); // Scale位数 必须小于等于 小数位数,否则会抛异常: java.lang.ArithmeticException: Rounding necessary

Java BigDecimal movePointRight()用法及代码示例

先决条件:BigDecimal基础

java.math.BigDecimal.movePointRight(int n)方法用于将当前BigDecimal的小数点向右移动n位。

如果n为非负数,则调用仅从小数位数中减去n。 如果n为负,则调用等效于movePointLeft(-n)。

此方法返回的BigDecimal具有值(this×10n)和小数位数最大值(this.scale()-n,0)。

用法:

public BigDecimal movePointRight(int n)

参数:该方法采用整数类型的一个参数n,该参数n是要求将小数点向右移动的位数。

返回值:该方法返回相同的BigDecimal值,并将小数点向右移动n位。

异常:如果刻度溢出,则该方法引发ArithmeticException。

例子:

Input: value = 2300.9856, rightshift = 3Output: 2300985.6Explanation:After shifting the decimal point of 2300.9856 by 3 places to right,2300985.6 is obtained.Alternate way: 2300.9856*10^(3)=2300985.6 Input: value = 35001, rightshift = 2Output: 3500100

以下示例程序旨在说明BigDecimal的movePointRight()方法:

// Program to demonstrate movePointRight() method of BigDecimal    import java.math.*;   public class GFG {       public static void main(String[] args)     {         // Create BigDecimal object         BigDecimal bigdecimal = new BigDecimal("2300.9856");           // Create a int i for decimal right move distance         int i = 3;           // Call movePointRight() method on BigDecimal by shift i         BigDecimal changedvalue = bigdecimal.movePointRight(i);           String result = "After applying decimal move right         by move Distance " + i + " on " + bigdecimal +          " New Value is " + changedvalue;           // Print result         System.out.println(result);     } }

输出:

After applying decimal move right by move Distance 3 on 2300.9856 New Value is 2300985.6

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java IO之序列化与反序列化详解
下一篇:英创信息技术JAVA操作英创主板I2C接口简介
相关文章

 发表评论

暂时没有评论,来抢沙发吧~