目录
方法:BigDecimal#setScale(int newScale, int roundingMode)
描述:
返回一个BigDecimal,其标度为指定值,其未标度值通过将此BigDecimal的未标度值乘以或除以适当的 10 次方来确定,以保持其整体值。
参数:
返回:
一个BigDecimal,其标度为指定值,其未标度值通过将此BigDecimal的未标度值乘以或除以十的适当幂来确定,以保持其整体值。
注意:
- 如果通过操作缩小比例,则必须将未缩放的值除(而不是相乘),并且值可能会改变;在这种情况下,指定的舍入模式应用于除法。
- 由于 BigDecimal 对象是不可变的,因此调用此方法不会导致修改原始对象,这与使用名为set X mutate field X的方法的通常约定相反。相反,setScale返回一个具有适当比例的对象;返回的对象可能是新分配的,也可能不是新分配的。
舍入模式 共8种,常见的有以下7种:
从零舍入。始终在非零丢弃分数之前增加数字。
注意:这种舍入模式永远不会降低计算值的大小。
向零舍入。
注意:这种舍入模式永远不会增加计算值的大小。
向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下向上舍入。
注意:这是我们大多数人在小学时所教的舍入模式。
向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下向下舍入。
向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下,向偶数邻居舍入。
注意:这是一种舍入模式,可在对一系列计算重复应用时最大限度地减少累积误差。
向正无穷大舍入。
注意:此舍入模式永远不会减少计算值。
向负无穷大舍入。
注意:此舍入模式永远不会增加计算值。
| 模式 | 正数 | 负数 | ||||
| 3.1411 | 3.1415 | 3.1416 | -3.1411 | -3.1415 | -3.1416 | |
| ROUND_UP | 3.142 | 3.142 | 3.142 | -3.142 | -3.142 | -3.142 |
| ROUND_DOWN | 3.141 | 3.141 | 3.141 | -3.141 | -3.141 | -3.141 |
| ROUND_HALF_UP | 3.141 | 3.142 | 3.142 | -3.141 | -3.142 | -3.142 |
| ROUND_HALF_DOWN | 3.141 | 3.141 | 3.142 | -3.141 | -3.141 | -3.142 |
| ROUND_HALF_EVEN | 3.141 | 3.142 | 3.142 | -3.141 | -3.142 | -3.142 |
| ROUND_CEILING | 3.142 | 3.142 | 3.142 | -3.141 | -3.141 | -3.141 |
| ROUND_FLOOR | 3.141 | 3.141 | 3.141 | -3.142 | -3.142 | -3.142 |
| 模式 | 正数 | 负数 | ||||
| 3.1411 | 3.1415 | 3.1416 | -3.1411 | -3.1415 | -3.1416 | |
| ROUND_UP | 3.2 | 3.2 | 3.2 | -3.2 | -3.2 | -3.2 |
| ROUND_DOWN | 3.1 | 3.1 | 3.1 | -3.1 | -3.1 | -3.1 |
| ROUND_HALF_UP | 3.1 | 3.1 | 3.1 | -3.1 | -3.1 | -3.1 |
| ROUND_HALF_DOWN | 3.1 | 3.1 | 3.1 | -3.1 | -3.1 | -3.1 |
| ROUND_HALF_EVEN | 3.1 | 3.1 | 3.1 | -3.1 | -3.1 | -3.1 |
| ROUND_CEILING | 3.2 | 3.2 | 3.2 | -3.1 | -3.1 | -3.1 |
| ROUND_FLOOR | 3.1 | 3.1 | 3.1 | -3.2 | -3.2 | -3.2 |
| 模式 | 正数 | 负数 | ||||
| 3.1411 | 3.1415 | 3.1416 | -3.1411 | -3.1415 | -3.1416 | |
| ROUND_UP | 4 | 4 | 4 | -4 | -4 | -4 |
| ROUND_DOWN | 3 | 3 | 3 | -3 | -3 | -3 |
| ROUND_HALF_UP | 3 | 3 | 3 | -3 | -3 | -3 |
| ROUND_HALF_DOWN | 3 | 3 | 3 | -3 | -3 | -3 |
| ROUND_HALF_EVEN | 3 | 3 | 3 | -3 | -3 | -3 |
| ROUND_CEILING | 4 | 4 | 4 | -3 | -3 | -3 |
| ROUND_FLOOR | 3 | 3 | 3 | -4 | -4 | -4 |
求近似数时。
当涉及不可分事物,且不可舍事物时,用“进1法”。
如:运货、装油、坐船、坐车、求所需面积等。
当涉及可分事物,(根据实际场景)向上进1位,并保留指定位置小数。
当涉及不可分事物,且不可舍事物时,用“去尾法”。
如:做蛋糕、分东西、做衣服等。
当涉及可分事物,(根据实际场景)截取指定位置小数,用“收尾法”。
常见于酒店/餐厅、打出租车的结算账单,不过要提前告知 顾客并获得同意,否则属于侵权。
如 账单显示实际消费 110.5元,最终收到 111元,这就是反向抹零。
以上是工作中的一些梳理,欢迎留言讨论……