我正在Talend中创建一个Job,使用来自数据库的一些数据转换来自.csv文件的数据,然后合并到另一个.csv文件中 . 在转换期间,需要对值执行一些计算:
value1 / value2 * value3
Value1取自.csv文件,默认情况下是表示金额f.e的String .
“15.25”
值2和3取自数据库,是BigDecimals,带有4个小数位 . 计算结果必须四舍五入到小数点后两位 .
My question is: How to convert data from .csv file so that it could be calculated with BigDecimals from database?
如果我将任何数据类型转换为BigDecimal,它将丢失小数,f.e来自String:BigDecimal n = new BigDecimal(“15.25”)结果将始终为
15
我试图用数学上下文ROUND_UNNECESSARY和setScale来做,但在这种情况下这似乎不相关 .
2 回答
谢谢你的答案,我找到了解决方案:我在尝试执行上述操作时出现的错误是我已经导出了
新BigDecimal(“15.25”)
到.csv文件,然后将此字段放入计算中 . 显然,Talend正在将正确转换的BigDecimal转换为“15”,除非我使用.toString() . 因此,在将示例性“15.25”转换为BigDecimal并且不将其放入.csv文件之后,下面的公式就可以了
谢谢@ peter-lawrey
您可以使用BigDecimal
版画
使用
double
执行此计算版画
如果使用了MathContext.DECIMAL128,则将使用未循环的值
在这个例子中,两种解决方案都足够准确 .