开发者社区 > 大数据与机器学习 > 大数据开发治理DataWorks > 正文

DataWorks有谁写过将一列字段中含有中文大写数字金额转换成阿拉伯数字的金额的吗?

DataWorks有谁写过将一列字段中含有中文大写数字金额转换成阿拉伯数字的金额的吗?

展开
收起
真的很搞笑 2023-10-16 22:08:47 98 0
5 条回答
写回答
取消 提交回答
  • 月移花影,暗香浮动

    在DataWorks中,将一列字段中含有的中文大写数字金额转换为阿拉伯数字的金额,可以通过自定义函数实现。首先需要定义一个数组,用于存储中文数字和阿拉伯数字的对应关系,例如:var chineseNum = [["零",0], ["壹",1], ["贰",2], ["叁",3], ["肆",4], ["伍",5], ["陆",6], ["柒",7], ["捌",8], ["玖",9]];。然后,通过遍历该数组,将中文大写数字金额转换成阿拉伯数字的金额。注意这种方法可能存在一定的误差,因为中文大写数字金额存在多种读法,转换结果可能会受到具体读法的影响。

    2023-10-17 15:56:03
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在DataWorks中,可以使用自定义函数(UDF)来实现将中文大写数字金额转换成阿拉伯数字金额的功能。以下是一个示例UDF的代码:

    import java.util.HashMap;
    import java.util.Map;
    
    public class ChineseNumberConverter {
        private static final Map<Character, Integer> digitMap = new HashMap<>();
    
        static {
            digitMap.put('零', 0);
            digitMap.put('一', 1);
            digitMap.put('二', 2);
            digitMap.put('三', 3);
            digitMap.put('四', 4);
            digitMap.put('五', 5);
            digitMap.put('六', 6);
            digitMap.put('七', 7);
            digitMap.put('八', 8);
            digitMap.put('九', 9);
        }
    
        public static String convertChineseNumber(String chineseNumber) {
            int result = 0;
            int temp = 0;
            int unit = 1;
            boolean isNegative = false;
    
            for (int i = 0; i < chineseNumber.length(); i++) {
                char c = chineseNumber.charAt(i);
    
                if (c == '负') {
                    isNegative = true;
                    continue;
                }
    
                if (digitMap.containsKey(c)) {
                    int digit = digitMap.get(c);
    
                    if (digit == 0) {
                        if (temp == 0) {
                            unit = 1;
                        } else {
                            unit = 0;
                        }
                    } else {
                        temp = digit;
                        unit = 1;
                    }
                }
    
                if (i == chineseNumber.length() - 1 || !digitMap.containsKey(chineseNumber.charAt(i + 1))) {
                    result += temp * unit;
                    temp = 0;
                }
            }
    
            if (isNegative) {
                result = -result;
            }
    
            return String.valueOf(result);
        }
    }
    

    这个示例UDF将中文大写数字金额转换为阿拉伯数字金额。你可以在DataWorks中创建一个自定义函数,并将上述代码作为自定义函数的实现。

    然后,在DataWorks的数据流转任务中,可以使用自定义函数的语法来调用该函数,将一列字段中的中文大写数字金额转换为阿拉伯数字金额。例如:

    SELECT ChineseNumberConverter.convertChineseNumber(column_name) AS converted_amount
    FROM your_table
    
    2023-10-17 13:58:48
    赞同 展开评论 打赏
  • 在DataWorks中,将一列字段中含有中文大写数字金额转换成阿拉伯数字金额的代码如下:

    import re
    
    def convert_to_arabic(num):
        num = num.replace('万', '')
        num = num.replace('亿', '')
        num = num.replace('元', '')
        num = re.sub('[\u4e00-\u9fa5]', '', num)
        num = num.replace(',', '')
        num = re.sub('[\+\-]', '', num)
        num = re.sub('(\d{1,3})(?=\d{3})', r'\1,', num)
        return float(num)
    
    # 示例数据
    data = [
        ['一千', '万', '十', '元'],
        ['二千', '亿', '十', '元'],
        ['三百', '万', '十', '元']
    ]
    
    # 将中文大写数字金额转换成阿拉伯数字金额
    for row in data:
        for i in range(len(row)):
            row[i] = convert_to_arabic(row[i])
    print(data)
    

    在这个示例中,我们定义了一个函数convert_to_arabic,用于将中文大写数字金额转换成阿拉伯数字金额。函数首先将金额字符串中的"万"、"亿"、"元"等字符替换为空字符串,然后使用正则表达式将金额字符串中的中文字符、逗号和加减号等字符替换为空字符串,最后将金额字符串中的千位分隔符(,)替换为小数点(.)。最后,我们将函数应用到数据表的每一行和每一列,将中文大写数字金额转换成阿拉伯数字金额。

    2023-10-17 11:16:59
    赞同 展开评论 打赏
  • 用数组转出来,在对每个数字进行case when 转换是不是就可以。,此回答整理自钉群“DataWorks交流群(答疑@机器人)”

    2023-10-17 08:12:26
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在DataWorks中,您可以使用MaxCompute SQL来实现将一列字段中含有中文大写数字金额转换成阿拉伯数字的金额。以下是一个示例SQL语句:

    -- 创建临时函数:将中文大写金额转换为阿拉伯数字金额
    CREATE TEMPORARY FUNCTION chinese_amount_to_number(amount STRING) RETURNS DOUBLE COMMENT 'Convert Chinese amount to number'
    BEGIN
      DECLARE number DOUBLE;
      SET number = 0;
    
      -- 定义中文大写数字和对应的阿拉伯数字
      DECLARE chinese_numbers ARRAY<STRING> = array['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
      DECLARE chinese_units ARRAY<STRING> = array['十', '百', '千', '万', '亿'];
    
      -- 循环处理每个字符
      FOR i IN 1..LENGTH(amount) DO
        DECLARE character STRING;
        SET character = SUBSTRING(amount, i, 1);
    
        -- 判断是否为数字字符(大写中文数字)
        IF FIND_IN_SET(character, chinese_numbers) > 0 THEN
          SET number = number * 10 + FIND_IN_SET(character, chinese_numbers) - 1;
        -- 判断是否为单位字符(大写中文单位)
        ELSEIF FIND_IN_SET(character, chinese_units) > 0 THEN
          SET number = number * POW(10, FIND_IN_SET(character, chinese_units) * 4);
        END IF;
      END FOR;
    
      RETURN number;
    END;
    
    -- 示例:将指定列的字段中的大写中文金额转换为阿拉伯数字金额
    INSERT OVERWRITE TABLE output_table
    SELECT chinese_amount_to_number(amount_column) AS arabic_amount
    FROM input_table;
    

    以上示例代码定义了一个临时函数chinese_amount_to_number,用于将中文大写数字金额转换为阿拉伯数字金额。您可以将示例代码中的input_table替换为包含待转换数据的表名,amount_column替换为待转换字段的列名,然后将转换结果写入到output_table中。

    2023-10-17 08:09:43
    赞同 展开评论 打赏

DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。

相关产品

  • 大数据开发治理平台 DataWorks
  • 热门讨论

    热门文章

    相关电子书

    更多
    DataWorks调度任务迁移最佳实践-2020飞天大数据平台实战应用第一季 立即下载
    DataWorks商业化资源组省钱秘籍-2020飞天大数据平台实战应用第一季 立即下载
    基于DataWorks数据服务构建疫情大屏-2020飞天大数据平台实战应用第一季 立即下载

    相关实验场景

    更多