数字金额大小写转换

数字金额大小写转换

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

有些时候,需要打印的凭证实现资本额多次,例如

数字金额大小写转换

有多种写法来实现

比如一下几种

CREATE OR REPLACE FUNCTION chinese_number_program(p_input FLOAT)
   RETURN VARCHAR2 AS

   TYPE typ_money IS TABLE OF VARCHAR2(20);
   c_numbers        typ_money := typ_money('零',
                                           '壹',
                                           '贰',
                                           '叁',
                                           '肆',
                                           '伍',
                                           '陆',
                                           '柒',
                                           '捌',
                                           '玖');
   c_unit           typ_money := typ_money('分',
                                           '角',
                                           '圆',
                                           '拾',
                                           '佰',
                                           '仟',
                                           '万',
                                           '拾',
                                           '佰',
                                           '仟',
                                           '亿',
                                           '拾',
                                           '佰',
                                           '仟',
                                           '兆',
                                           '拾',
                                           '佰',
                                           '仟');
   v_array_money    typ_money := typ_money();
   chinese_number   VARCHAR2(30);
   RESULT           VARCHAR2(1000);
   v_number         INTEGER;
   v_number_element INTEGER;
   i                INT;
BEGIN
   IF (p_input >= power(10, 16)) THEN
      RESULT := '超出计算范围';
      RETURN RESULT;
   END IF;
   v_number := round(p_input * 100);

   i := 1;
   v_array_money.extend(1);
   v_array_money(v_array_money.count) := '整';

   WHILE v_number > 0 LOOP
      v_number_element := MOD(v_number, 10);
      IF (v_number_element = 0) THEN
         IF i IN (3, 7, 11, 15) THEN
            chinese_number := c_unit(i);
         ELSE
            chinese_number := c_numbers(v_number_element + 1);
         END IF;
      ELSE
         chinese_number := c_numbers(v_number_element + 1) || c_unit(i);
      END IF;
   
      CASE
         WHEN chinese_number = '零' THEN
            IF (v_array_money(v_array_money.count) NOT IN
               ('整', '零', '圆', '万', '亿', '兆')) THEN
               v_array_money.extend(1);
               v_array_money(v_array_money.count) := chinese_number;
            END IF;
         WHEN chinese_number LIKE '%亿' THEN
            IF (v_array_money(v_array_money.count) IN ('万')) THEN
               v_array_money(v_array_money.count) := chinese_number;
            ELSE
               v_array_money.extend(1);
               v_array_money(v_array_money.count) := chinese_number;
            END IF;
         WHEN chinese_number LIKE '%兆' THEN
            IF (v_array_money(v_array_money.count) IN ('万', '亿')) THEN
               v_array_money(v_array_money.count) := chinese_number;
            ELSE
               v_array_money.extend(1);
               v_array_money(v_array_money.count) := chinese_number;
            END IF;
         ELSE
            v_array_money.extend(1);
            v_array_money(v_array_money.count) := chinese_number;
      END CASE;
      v_number := floor(v_number / 10);
      i        := i + 1;
   END LOOP;
   FOR i IN v_array_money.first .. v_array_money.last LOOP
      RESULT := v_array_money(i) || RESULT;
   END LOOP;

   RETURN RESULT;
END;

#import <Foundation/Foundation.h>
#import <stdio.h>

void print( NSArray *array ) {
    int i;
    for (i=0;i<[array count];i++)
    {
        NSLog(@"%@",[array objectAtIndex:i]);
    }

}

void print2( NSArray *array ) {
    NSEnumerator *enumerator = [array objectEnumerator];
    id obj;
    while ( obj = [enumerator nextObject] ) {
        printf( "%s\n", [[obj description] cString] );
    }
}

void print3( NSArray *array ) {
    id obj;
    NSLog(@"new array is ");
    for (obj in array)
    {
        NSLog(@"%@",obj);
    }
}

NSString * printByLine( NSArray *array ) {
    id obj;
    NSMutableString * oneLine;
    oneLine=[NSMutableString stringWithCapacity:100];
    NSString * oneString;

    for (obj in array)
    {
        oneString=[obj copy];

        //[oneLine appendString:oneString];
        [oneLine insertString:oneString atIndex:0];

       // NSLog(@"xx= %@,%d,%d",oneLine,oneLine,oneString);
    }

    return oneLine;


}



int main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    //NSArray *arr_numbers = [[NSArray alloc] initWithObjects:@"Áã", @"Ò¼", @"·¡", @"Èþ", @"ËÁ", @"Îé", @"½", @"Æâ", @"°Æ", @"¾Á", nil];
    NSArray *arr_numbers = [[NSArray alloc] initWithObjects:@"Zero", @"One", @"Two", @"Three", @"Four", @"Five", @"Six", @"Seven", @"Eight", @"Nine", nil];

    //NSArray *arr_unit = [[NSArray alloc] initWithObjects:@"·Ö", @"½Ç", @"Ô²", @"ʰ", @"°Û", @"Ǫ", @"Íò", @"ʰ", @"°Û", @"Ǫ", @"ÒÚ", @"ʰ", @"°Û", @"Ǫ", @"Õ×", @"ʰ", @"°Û", @"Ǫ",nil];
    NSArray *arr_unit = [[NSArray alloc] initWithObjects:@"F", @"J", @"Yuan", @"S", @"B", @"Q", @"W", @"S", @"B", @"Q", @"Yi", @"S", @"B", @"Q", @"Z", @"S", @"B", @"Q",nil];

    NSMutableArray * mutable_money = [[NSMutableArray alloc] init];

    NSSet * set_special_number=[[NSSet alloc] initWithObjects:@"Zheng",@"Zero",@"Yuan",@"W",@"Yi",@"Z"];

    //print(arr_numbers);
   // print2(arr_numbers);
   // print3(arr_unit);

    float p_input_number;
    int input_number;
    int input_number_element;
    int i=0;

    NSString * chinese_number;
    NSString * result;
    p_input_number=1008.20;

    if (p_input_number>9999999)
    {
        result =@"out of maximize range";
        NSLog(@"%@",result);
        return 0;
    }


    input_number=p_input_number*100;

    [mutable_money addObject:@"Zheng"];

    //[[chinese_number alloc] init];

    while (input_number>0)
    {
        input_number_element=input_number%10;

        if(input_number_element==0)
        {
            if (i == 2 || i==6 || i==10 || i==14)
            {
                chinese_number=[arr_unit objectAtIndex:i];
            }
            else
            {
                chinese_number=[arr_numbers objectAtIndex:input_number_element];
            }

        }
        else
        {
            chinese_number=[[arr_numbers objectAtIndex:input_number_element] stringByAppendingString:[arr_unit objectAtIndex:i]];
        }

      //  NSLog(@"%@,%@,%@",chinese_number,[arr_numbers objectAtIndex:input_number_element],[arr_unit objectAtIndex:i]);
       // NSLog(@"%d,%d,%d",chinese_number,[arr_numbers objectAtIndex:input_number_element],[arr_unit objectAtIndex:i]);


        if ([chinese_number isEqualToString:@"Zero"])
        {
            if (!([set_special_number containsObject:[mutable_money lastObject]]))
            {
            [mutable_money addObject:chinese_number];

            //NSLog(@"zero is %@,%@,%@",chinese_number,[arr_numbers objectAtIndex:input_number_element],[arr_unit objectAtIndex:i]);

            }
        }
        else if ([chinese_number hasSuffix:@"Yi"])
        {
            if ([[mutable_money lastObject] isEqualToString:@"W"])
            {
                [mutable_money removeLastObject];
                [mutable_money addObject:chinese_number];
            }
            else
            {
                [mutable_money addObject:chinese_number];
            }

            //NSLog(@"Yi is %@,%@,%@",chinese_number,[arr_numbers objectAtIndex:input_number_element],[arr_unit objectAtIndex:i]);
        }

        else
        {
            [mutable_money addObject:chinese_number];
            //NSLog(@"Others is %@,%@,%@",chinese_number,[arr_numbers objectAtIndex:input_number_element],[arr_unit objectAtIndex:i]);
        }

        input_number=input_number/10;
        i++;

    }





   NSLog(@"%@",printByLine(mutable_money));



    // free memory

    [arr_numbers release];
    [arr_unit release];
    [mutable_money release];

    [pool release];

    return 0;
}

FUNCTION money_format_zhs(p_money_amount IN NUMBER) RETURN VARCHAR2 IS
  
    c_money_amount VARCHAR2(20);
    n_string       VARCHAR2(40) := '壹贰叁肆伍陆柒捌玖';
    l_string       VARCHAR2(600);
    n              CHAR;
    l_length       NUMBER;
    i              NUMBER;
    tmp            NUMBER;
    is_zero        BOOLEAN;
    z_count        NUMBER;
    l_money_amount NUMBER;
    l_sign         VARCHAR2(10);
  
  BEGIN
  
    l_money_amount := round(abs(p_money_amount),
                            2);
  
    IF p_money_amount < 0 THEN
      l_sign := '负';
    ELSE
      l_sign := '';
    END IF;
  
    tmp := l_money_amount * 100;
  
    c_money_amount := rtrim(ltrim(to_char(tmp,
                                          '999999999999999999')));
  
    l_length := length(c_money_amount);
  
    i := 0;
  
    WHILE i < l_length
    LOOP
    
      i := i + 1;
      n := substr(c_money_amount,
                  i,
                  1);
    
      IF n <> '0' THEN
      
        l_string := l_string || substr(n_string,
                                       to_number(n),
                                       1);
      
        IF l_length - i = 1 THEN
          l_string := l_string || '角';
        END IF;
      
        IF l_length - i = 0 THEN
          l_string := l_string || '分';
        END IF;
      
        IF l_length > 4
           AND l_length - i > 1 THEN
        
          IF MOD(l_length - i - 1,
                 4) = 0 THEN
            l_string := l_string || '仟';
          END IF;
        
          IF MOD(l_length - i,
                 4) = 0 THEN
          
            l_string := l_string || '佰';
          
          END IF;
        
          IF MOD(l_length - i + 1,
                 4) = 0 THEN
          
            l_string := l_string || '拾';
          
          END IF;
        
        ELSE
        
          IF l_length - i = 3 THEN
          
            l_string := l_string || '拾';
          
          END IF;
        
        END IF;
      
      END IF;
    
      IF n = '0' THEN
      
        IF l_length - i IN (10,
                            6,
                            2,
                            0,
                            i) THEN
        
          IF is_zero THEN
            l_string := substr(l_string,
                               1,
                               length(l_string) - 1);
            is_zero  := FALSE;
          END IF;
        
          z_count := 0;
        
        ELSE
        
          IF z_count = 0 THEN
            l_string := l_string || '零';
            is_zero  := TRUE;
          END IF;
        
          z_count := z_count + 1;
        
        END IF;
      
      ELSE
      
        z_count := 0;
        is_zero := FALSE;
      
      END IF;
    
      IF (l_length - i = 6 OR l_length - i = 14)
         AND substr(c_money_amount,
                    i - 3,
                    4) <> '0000' THEN
      
        l_string := l_string || '万';
      
      END IF;
    
      IF l_length - i = 10 THEN
      
        l_string := l_string || '亿';
      
      END IF;
    
      IF l_length - i = 2 THEN
      
        l_string := l_string || '圆';
      
      END IF;
    
    END LOOP;
  
    l_string := l_string || '整';
  
    l_string := l_sign || l_string;
  
    RETURN l_string;
  
  EXCEPTION
    WHEN OTHERS THEN
      RETURN(SQLERRM);
  END;

 FUNCTION money_format_us(p_money_amount IN NUMBER) RETURN VARCHAR2 IS
  
    TYPE lt_array_type IS VARRAY(50) OF VARCHAR2(20); --一维数组,字符串类型
    l_array lt_array_type := lt_array_type('ONE ',
                                           'TWO ',
                                           'THREE ',
                                           'FOUR ',
                                           'FIVE ',
                                           'SIX ',
                                           'SEVEN ',
                                           'EIGHT ',
                                           'NINE ',
                                           'TEN ',
                                           'ELEVEN ',
                                           'TWELVE ',
                                           'THIRTEEN ',
                                           'FOURTEEN ',
                                           'FIFTEEN ',
                                           'SIXTEEN ',
                                           'SEVENTEEN ',
                                           'EIGHTEEN ',
                                           'NINETEEN ',
                                           'TWENTY ',
                                           'THIRTY ',
                                           'FORTY ',
                                           'FIFTY ',
                                           'SIXTY ',
                                           'SEVENTY ',
                                           'EIGHTY ',
                                           'NINETY ',
                                           'HUNDRED ',
                                           'THOUSAND ',
                                           'MILLION ',
                                           'BILLION ');
  
    c_money_amount VARCHAR2(14);
    l_string       VARCHAR2(600);
    n              CHAR;
    l_pre_n        CHAR;
    l_length       NUMBER;
    i              NUMBER;
    tmp            NUMBER;
    l_decimal_flag VARCHAR2(1);
    l_money_amount NUMBER;
    l_sign         VARCHAR2(10);
  
  BEGIN
  
    l_money_amount := round(abs(p_money_amount),
                            2);
  
    IF p_money_amount < 0 THEN
      l_sign := 'NEGATIVE ';
    ELSE
      l_sign := '';
    END IF;
  
    tmp := l_money_amount * 100;
  
    c_money_amount := rtrim(ltrim(to_char(tmp,
                                          '999999999999999999')));
  
    l_length := length(c_money_amount);
  
    i := 0;
  
    WHILE i < l_length - 2
    LOOP
    
      i := i + 1;
    
      IF MOD(l_length - 2 - i,
             3) = 2 THEN
      
        n := substr(c_money_amount,
                    i,
                    1);
      
        IF n <> '0' THEN
        
          l_string := l_string || l_array(to_number(n));
          l_string := l_string || l_array(to_number(28));
        
        END IF;
      
      END IF;
    
      IF MOD(l_length - 2 - i,
             3) = 1 THEN
      
        n := substr(c_money_amount,
                    i,
                    1);
      
        IF n = '1' THEN
        
          l_pre_n := n;
        
        END IF;
      
        IF n NOT IN ('0',
                     '1') THEN
        
          l_string := l_string || l_array(to_number(n) + 18);
        
        END IF;
      
      END IF;
    
      IF MOD(l_length - 2 - i,
             3) = 0 THEN
      
        IF nvl(l_pre_n,
               'X') = '1' THEN
        
          n := substr(c_money_amount,
                      i,
                      1);
        
          l_string := l_string || l_array(to_number(l_pre_n || n));
        
          l_pre_n := NULL;
        
        ELSE
        
          n := substr(c_money_amount,
                      i,
                      1);
        
          IF n <> '0' THEN
          
            l_string := l_string || l_array(to_number(n));
          
          END IF;
        
        END IF;
      
      END IF;
    
      IF l_length - i = 5
         AND substr(c_money_amount,
                    i - 2,
                    3) <> '000' THEN
      
        l_string := l_string || l_array(to_number(29));
      
      END IF;
    
      IF l_length - i = 8
         AND substr(c_money_amount,
                    i - 2,
                    3) <> '000' THEN
      
        l_string := l_string || l_array(to_number(30));
      
      END IF;
    
      IF l_length - i = 11 THEN
      
        l_string := l_string || l_array(to_number(31));
      
      END IF;
    
    END LOOP;
  
    n := substr(c_money_amount,
                l_length - 1,
                1);
  
    IF n NOT IN ('0',
                 '1') THEN
    
      l_decimal_flag := 'Y';
      l_string       := l_string || 'AND ';
      l_string       := l_string || l_array(to_number(n) + 18);
    
    END IF;
  
    IF n = '1' THEN
    
      l_decimal_flag := 'Y';
      l_string       := l_string || 'AND ';
    
      l_pre_n := n;
    
      n := substr(c_money_amount,
                  l_length,
                  1);
    
      l_string := l_string || l_array(to_number(l_pre_n || n));
    
    ELSE
    
      n := substr(c_money_amount,
                  l_length,
                  1);
    
      IF n <> '0' THEN
      
        IF nvl(l_decimal_flag,
               'N') = 'N' THEN
        
          l_string := l_string || 'AND ';
        
        END IF;
      
        l_decimal_flag := 'Y';
      
        l_string := l_string || l_array(to_number(n));
      
      END IF;
    
    END IF;
  
    IF l_decimal_flag = 'Y' THEN
    
      l_string := l_string || 'CENTS ';
    
    ELSE
    
      l_string := l_string;
    
    END IF;
  
    l_string := l_sign || l_string || 'ONLY ';
  
    RETURN l_string;
  
  EXCEPTION
    WHEN OTHERS THEN
      RETURN(SQLERRM);
  END;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117845.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详解Java中的Spring框架

    详解Java中的Spring框架详解Spring什么是SpringSpring的优点Bean容器Bean的注解Bean属性Bean作用域Bean的生命周期Bean的实例化IoC(InversionofControl)和DI(DedendencyInjection)IoC(控制反转)DI(依赖注入)AOP什么是SpringSpring是分层的JavaSE/EEfull-stack轻量级开源框架,以IoC(InverseofControl,控制反转)和AOP(AspectOrientedProgramming

    2022年7月7日
    23
  • 用户态和内核态区别是什么_进程运行在内核态还是用户态

    用户态和内核态区别是什么_进程运行在内核态还是用户态1、linux进程有4GB地址空间,如图所示:3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。2、特权级的概念:对于任何操作系统来说,创建一个进程是核心功能。创建进程要做很多工作,会消耗很多物理资源。比如分配物理内存,父子进程拷贝信息,拷贝设置页目录页表等等,这些工作得由特定的进程去做,所以就有了特权级别的概念。最关键的工作必须交给特权级最高的进程去执行,这样可以做到集中管理,减少有限资源的访问和使用冲突。interx86架构的cpu一共有

    2022年9月18日
    2
  • Nginx_handler模块发开(hello模块结构解析)「建议收藏」

    Nginx_handler模块发开(hello模块结构解析)

    2022年2月5日
    49
  • vi 命令 使用方法

    vi 命令 使用方法

    2021年11月14日
    50
  • Spring Boot定制首页和404页面

    Spring Boot定制首页和404页面一、定制首页:方式一:SpringBoot自动映射在静态资源目录resources、static、public的其中一个目录中创建index.html文件,springBoot会自动识别,将这个文件作为首页访问 方式二:使用thymeleaf模板引擎1.导入依赖<!–Thymeleaf模板引擎依赖–><dependency><groupId>org.thymeleaf</groupId><artifact

    2022年7月27日
    14
  • pycharm安装教程(非常详细)_扶梯安装步骤

    pycharm安装教程(非常详细)_扶梯安装步骤Pycharm安装+Anconda环境配置,需要下载软件的请访问​​​​​​(75条消息)Python软件.zip(pycharm安装包Anconda安装包)-Python文档类资源-CSDN文库(免费下载免费下载免费下载免费下载免费下载免费下载),没有安装Ancondade小伙伴可以访问Anconda安装(超详细)写文章-CSDN博客https://mp.csdn.net/mp_blog/creation/editor/120982868…

    2022年8月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号