【问题标题】:Talend Convert string to FloatTalend 将字符串转换为浮点数
【发布时间】:2017-01-27 13:09:01
【问题描述】:

我正在使用 Talend 制作一个 ETL 项目。 要将我的字符串转换为 Double,我使用 Float.parseFloat(row4.Exportation2.trim()) 这是它给我的错误。 这就是我的数据在 exportation2 中的样子“766,9997474”“1 345,43” 有谁知道为什么?

Démarrage du job ConvertString a 14:03 27/01/2017.
Exception in component tMap_1
java.lang.NumberFormatException: For input string: "23,4897452"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at last.convertstring_0_1.ConvertString.tFileInputDelimited_1Process(ConvertString.java:1553)
at last.convertstring_0_1.ConvertString.runJobInTOS(ConvertString.java:2075)
at last.convertstring_0_1.ConvertString.main(ConvertString.java:1932)
[statistics] connecting to socket on port 3464
[statistics] connected
6|Royaume-Uni|BA|1971|23,4897452
[statistics] disconnected
Job ConvertString terminé à 14:03 27/01/2017. [Code sortie=1]

【问题讨论】:

    标签: converter talend


    【解决方案1】:

    这里有多个问题:

    • 如果您想从 String 转换为 Double,您应该使用 Double.parseDouble()。
    • "," 不是预期的字符:它应该是 "." : 您必须将“,”字符转换为“。” char :如果您的输入来自 excel 或分隔文件,您可以在 tFileInput 组件的高级设置(“高级分隔符”)中设置此选项。否则你应该使用yourString.replaceAll(",", "."))

    • 字符串中有一个非标准空格,您应该将其替换为yourString.replaceAll(" ", ""))

    【讨论】:

    • 你好,我直到现在才进行替换,我不知道如何修复这个结果 1�527.18
    • 你的输入中有一个空格,所以我猜你必须调用两次replaceAll方法(一次是逗号,另一次是空格,用“”替换)
    • 我做了这个 row3.Exportation2.replaceAll(",", ".").replaceAll(" ", "") 但结果没有改变 1�527.18 还是一样
    • 结果中的这个空格字符似乎不是标准的 (�)。如果你可以编辑源删除它会更简单,否则尝试将其复制粘贴到 replaceAll 方法中。
    • 非常感谢它的工作:) 但是当我将 outputfile.csv 中的数字乘以 100 万时,结果显示为 2.3489745200000003E7 而不是 23489745.200000003 你能帮我解决这个问题吗跨度>
    【解决方案2】:

    为此,您可以在 t_Map 中使用很多功能: columnValue = columnValue.replaceAll("\\W","");

    \w = Anything that is a word character \W = Anything that isn't a word character (including punctuation etc) \s = Anything that is a space character (including space, tab characters etc) `\S = 任何非空格字符(包括字母和数字,以及标点符号等)

    或者如果你想忽略除字母或数字以外的任何东西,你可以简单地使用:

    .replaceAll("[^a-zA-Z0-9]", "")

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多