| | |
| | | throw new BaseException("数量不能为空"); |
| | | } |
| | | |
| | | // 如果源单位为空,直接返回原值 |
| | | if (sourceUnit == null || sourceUnit.isEmpty()) { |
| | | // 源单位或目标单位为空,或单位相同,或任一单位不是吨/公斤,则不转换 |
| | | if (sourceUnit == null || sourceUnit.isEmpty() |
| | | || targetUnit == null || targetUnit.isEmpty() |
| | | || sourceUnit.equals(targetUnit) |
| | | || (!"吨".equals(sourceUnit) && !"公斤".equals(sourceUnit) && !"吨".equals(targetUnit) && !"公斤".equals(targetUnit))) { |
| | | return quantity; |
| | | } |
| | | |
| | | // 如果源单位和目标单位相同,直接返回 |
| | | if (sourceUnit.equals(targetUnit)) { |
| | | return quantity; |
| | | // 吨 <-> 公斤 转换 |
| | | if ("吨".equals(targetUnit) && "公斤".equals(sourceUnit)) { |
| | | // 公斤转吨:除以1000,保留2位小数 |
| | | return quantity.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP); |
| | | } else if ("公斤".equals(targetUnit) && "吨".equals(sourceUnit)) { |
| | | // 吨转公斤:乘以1000 |
| | | return quantity.multiply(BigDecimal.valueOf(1000)); |
| | | } |
| | | |
| | | // 单位转换 |
| | | if ("吨".equals(targetUnit)) { |
| | | // 目标单位是吨,需要将源单位转换为吨 |
| | | if ("公斤".equals(sourceUnit)) { |
| | | // 公斤转吨:除以1000 |
| | | return quantity.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP); |
| | | } else if ("克".equals(sourceUnit)) { |
| | | // 克转吨:除以1000000 |
| | | return quantity.divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP); |
| | | } |
| | | } else if ("公斤".equals(targetUnit)) { |
| | | // 目标单位是公斤 |
| | | if ("吨".equals(sourceUnit)) { |
| | | // 吨转公斤:乘以1000 |
| | | return quantity.multiply(BigDecimal.valueOf(1000)); |
| | | } else if ("克".equals(sourceUnit)) { |
| | | // 克转公斤:除以1000 |
| | | return quantity.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP); |
| | | } |
| | | } else if ("克".equals(targetUnit)) { |
| | | // 目标单位是克 |
| | | if ("吨".equals(sourceUnit)) { |
| | | // 吨转克:乘以1000000 |
| | | return quantity.multiply(BigDecimal.valueOf(1000000)); |
| | | } else if ("公斤".equals(sourceUnit)) { |
| | | // 公斤转克:乘以1000 |
| | | return quantity.multiply(BigDecimal.valueOf(1000)); |
| | | } |
| | | } |
| | | |
| | | // 无法转换时返回原值 |
| | | return quantity; |
| | | } |
| | | |