Java.String转化Big Decimal保留原始数据
时间: 2024-01-13 17:05:54 浏览: 111
在Java中,可以使用BigDecimal类来精确处理十进制数,而不会出现舍入误差。如果你想要将一个字符串转化为BigDecimal类型,并且保留原始数据,可以使用以下代码:
```java
String str = "123.456789";
BigDecimal bd = new BigDecimal(str);
```
这样就可以将字符串"123.456789"转化为BigDecimal类型的对象bd。如果你想保留原始数据的话,可以使用以下代码:
```java
BigDecimal bd = new BigDecimal(str, MathContext.UNLIMITED);
```
其中,MathContext.UNLIMITED表示没有限制保留精度。这样就可以保留原始数据,而不会出现舍入误差。
相关问题
kettle中计算器计算乘法,但字段a是从数据库中获取的varchar类型,无法转换成bignumber
在Kettle(Pentaho Data Integration)中,如果计算器组件需要处理的是从数据库查询出的VARCHAR类型的值(通常是字符串),而这个值需要参与乘法运算,通常这种操作会遇到问题,因为VARCHAR类型的值不能直接相乘,尤其是与 BigNumber 类型的数据(如大数据整数)进行算术运算。
当你尝试将VARCHAR类型的数值(比如"10"这样的字符串)转换为BigNumber,你需要先将其解析为数字形式。这通常涉及到两个步骤:
1. **数据类型转换**:使用适当的函数(如`number_from_string`)将VARCHAR转换为数值类型,例如INT或DECIMAL,然后再转换为BigNumber。Kettle提供了一些文本处理函数可以用于这类转换。
2. **字符串转数字**:如果数据库返回的是包含数值的字符串,需要使用适当的方法(比如`java.lang.Long.parseLong()`或`java.math.BigDecimal.valueOf()`)将字符串解析为对应的数值类型。
```sql
-- 使用Kettle的SQL表达式
$VAR = number_from_string($field_a, 'INTEGER'); // 如果字段a是十进制数字
$VAR = big_number_value($field_a); // 如果有BigNumber支持
-- 或者在转换后再做乘法
$bigMultiply = $VAR * $bigNumber_b;
```
然而,需要注意的是,如果原始字符串不是一个有效的数字格式,上述过程可能会失败。另外,如果你不确定字符串是否能被解析为数值,最好添加错误处理机制,以防异常发生。
阅读全文