【问题标题】:How should I assign the fractional part to a BigDecimal that comes from a tFileInputPositional in Talend?我应该如何将小数部分分配给来自 Talend 中的 tFileInputPositional 的 BigDecimal?
【发布时间】:2015-05-19 09:05:59
【问题描述】:

我正在使用 Talend Open Studio 进行数据集成。

我有一个创建多个字段的 tFileInputPositional。其中一个看起来像这样:“+0000030139808303”。

我需要将这些字段保存到 BigDecimal(20,2) 中,以便最后两位数字成为小数部分,但是,在组件的架构中键入它时,它只是在末尾添加“,00”号码。

所以,总结一下...
我有什么:
+0000030139808303

我想要什么:
301398083,03

我得到了什么:
30139808303,00

有人可以帮我实现吗?
谢谢!

【问题讨论】:

  • 你说“我得到了什么”这表明你有一些当前的代码 - 请显示那个代码是什么......
  • @JonSkeet 好吧,我已经设置了组件。基本上有这个 tInputFilePositional 连接到一个 tMap,其主要输出是 tMysqlOutput。
  • @JonSkeet 当我说“我得到了什么”时,我的意思是这些值最终会出现在我的 MySQL 数据库中。
  • 不清楚您所说的“连接到 tMap”是什么意思 - 这是 Talend 的概念吗? (该解决方案可能不是特定于 Talend 的,而且您可以提出的问题越不特定于 Talend,就越好......)
  • @JonSkeet 是的,我很抱歉。 tMap、tInputFilePositional 和 tMysqlOutput 是 talend 组件,它们是相互关联的。我不会发布代码本身,因为它是自动生成的并且无法修改,所以你知道这些东西看起来有多丑。但关键是在 tMap 中我可以与值交互(tInputFilePositional 只是为我提供了一个模式,我可以用值填充,而不是输入 java 代码)。在 tMap 中,我可以在变量声明中输入“=”后面的部分。这就是我写“row16.ObliRecNetasGtos.movePointLeft(2)”的地方。

标签: java types casting bigdecimal talend


【解决方案1】:

【讨论】:

  • 谢谢和抱歉,@MrOerni,我直到现在才看到你的答案。我已经尝试过了,并在数据库中得到了很好的结果,但是 java 控制台为(我猜)处理的每一行打印“null”。当我尝试除法时,我之前得到了相同的结果。程序的其余部分运行良好,所以我想问题一定出在那儿。
【解决方案2】:

我怀疑你只是想要BigDecimal.movePointLeft

返回一个 BigDecimal,它等价于小数点向左移动 n 位。如果n 为非负数,则调用只会将n 添加到比例中。如果n 是否定的,则调用等效于movePointRight(-n)。此调用返回的BigDecimal 具有值(this × 10^-n) 和缩放max(this.scale()+n, 0)

例如:

import java.math.BigDecimal;

public class Test {
    public static void main(String [] args) {
        String text = "+0000030139808303";
        BigDecimal original = new BigDecimal(text);
        BigDecimal shifted = original.movePointLeft(2);
        System.out.println(shifted);
    }    
}

输出:

301398083.03

【讨论】:

  • 听起来不错,我会试一试,如果有效,请告诉您!谢谢!
  • 嗯,它确实有效。我在数据库中得到了正确的值。但是,出于某种原因,java控制台正在为(我猜)处理的每一行打印“null”。知道为什么会这样吗?
  • @PabloIT:对 Java 控制台打印的内容一无所知,或者对您正在运行的内容一无所知,不......
  • 好吧,在我输入这一行之前,程序的其余部分确实运行良好(只是值不正确),所以我猜应该是错误。在发布之前,我尝试划分并得到相同的结果。除了连接/断开的行之外,Java 控制台只打印一堆空值。
  • 它打印这个:在 2015 年 19 月 5 日 11:27 开始工作 Gastos_de_Funcionamiento_Cuentas_Formuladas_aux。 [统计] 连接到端口 4031 上的套接字 [统计] 已连接 null null null null //... [统计] 已断开作业 Gastos_de_Funcionamiento_Cuentas_Formuladas_aux 于 2015 年 19 月 5 日 11:27 结束。 [退出代码=0]
猜你喜欢
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多