`
zuzong
  • 浏览: 115013 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

金额小写转换为大写

    博客分类:
  • UI
阅读更多

<!-- 支持千分位格式及负数输入,整数部分可达44位-千正~元,小数部分可达5位-角~丝

注:以下这句当整数位长超16位时,js中的Number()转换及运算会导致精度丧失:

vInt = (Number(vInt) + 1).toString();

传到到后台算吧 ajax。
 -->

<script type="text/javascript">  
/* 小写金额转换成大写(人民币元)
入参(P1):dValue 金额数值或数值字符串
  a, 也支持千分位格式(#,##0.00)输入;
  b, 支持负数,将前导“-”号转为“负”字,将前导的“+”号忽略或转为“正”字;
  c1, 值域之整数部分上限(超限则返回错误):
       44位/千正;43位/百正;42位/十正; 
       41位/【正】即万涧即亿亿亿亿亿(10^40,1正=1万涧=1亿亿亿亿亿=10,000,000,000,000,000,000,000,000,000,000,000,000,000);40位/千涧;39位/百涧;38位/十涧; 
       37位/【涧】即万涧即万亿亿亿亿(10^36,1涧=1万沟=1万亿亿亿亿=1,000,000,000,000,000,000,000,000,000,000,000,000);36位/千沟;35位/百沟;34位/十沟;
       33位/【沟】即万穰即亿亿亿亿(10^32,1沟=1万杼=1亿亿亿亿=100,000,000,000,000,000,000,000,000,000,000);31位/千穰;30位/百穰;29位/十穰; 
       29位/【穰】即万杼即万亿亿亿(10^28,1穰=1万杼=1万亿亿亿=10,000,000,000,000,000,000,000,000,000);28位/千杼;27位/百杼;26位/十杼;
       25位/【杼】即万垓即亿亿亿(10^24,1杼=1万垓=1亿亿亿=1,000,000,000,000,000,000,000,000);24位/千垓;23位/百垓;22位/十垓;
       21位/【垓】即万京即万亿亿(10^20,1垓=1万京=1万亿亿=100,000,000,000,000,000,000);20位/千京;19位/百京;18位/十京;
       17位/【京】即万兆即亿亿(10^16,1京=1万兆=1亿亿=10,000,000,000,000,000);16位/千兆;15位/百兆;14位/十兆;
       13位/【兆】即万亿(10^12,1兆=1万亿=1,000,000,000,000);12位/千亿;11位/百亿;10位/十亿;
       9位/【亿】(10^8,1亿=1万万=100,000,000);8位/千万;7位/百万;6位/十万;
       5位/【万】(10^4,1万=10,000);4位/千;3位/百;2位/十;1位/个。
  c2, 值域之小数部分上限:5位或用户参数指定(角/分/厘/毫/丝,超限则四舍五入)。
入参(P1):maxDec 精确小数位数(值域0~5,不指定则默认为2,超限归为默认)。
用法:AmountInWords(890123456789.123456)    AmountInWords(324,567,890,123.45)    AmountInWords(123.00)  AmountInWords(0.67)
      -10,090,008,000,700,060,005,000,400,030,002,000,100,000,000.123456 = 负壹仟零玖正零捌涧零柒沟零陆穰零伍杼零肆垓零叁京零贰兆零壹亿元壹角贰分叁厘肆毫陆丝
      12,345,678,901,234,567,890,123,456,789,012,345,678,901,234.123456  = 壹仟贰佰叁拾肆正伍仟陆佰柒拾捌涧玖仟零壹拾贰沟叁仟肆佰伍拾陆穰柒仟捌佰玖拾杼零壹仟贰佰叁拾肆垓伍仟陆佰柒拾捌京玖仟零壹拾贰兆叁仟肆佰伍拾陆亿柒仟捌佰玖拾万零壹仟贰佰叁拾肆元壹角贰分叁厘肆毫陆丝
返回:大写字符串
更新:冉冉毅马 2008-02-27 12:44
更新说明:整数由11位(百亿)扩展至44位/千正/10^43(注:1正=1万涧=1亿亿亿亿亿,10^40);小数由2位(分/10^-2)扩展至5位(丝/10^-5)并可通过参数自定义;支持正负号;出错不再弹出窗口而改为直接返回返回文本。
*/


function AmountInWords(dValue, maxDec)
{
    // 验证输入金额数值或数值字符串:
    dValue = dValue.toString().replace(/,/g, "");  dValue = dValue.replace(/^0+/, "");      // 金额数值转字符、移除逗号、移除前导零
    if (dValue == "") { return "零元整"; }      // (错误:金额为空!)
    else if (isNaN(dValue)) { return "错误:金额不是合法的数值!"; }
   
    var minus = "";                             // 负数的符号“-”的大写:“负”字。可自定义字符,如“(负)”。
    var CN_SYMBOL = "";                         // 币种名称(如“人民币”,默认空)
    if (dValue.length > 1)
    {
        if (dValue.indexOf('-') == 0) { dValue = dValue.replace("-", ""); minus = "负"; }   // 处理负数符号“-”
        if (dValue.indexOf('+') == 0) { dValue = dValue.replace("+", ""); }                 // 处理前导正数符号“+”(无实际意义)
    }
   
    // 变量定义:
    var vInt = ""; var vDec = "";               // 字符串:金额的整数部分、小数部分
    var resAIW;                                 // 字符串:要输出的结果
    var parts;                                  // 数组(整数部分.小数部分),length=1时则仅为整数。
    var digits, radices, bigRadices, decimals;  // 数组:数字(0~9——零~玖);基(十进制记数系统中每个数字位的基是10——拾,佰,仟);大基(万,亿,兆,京,垓,杼,穰,沟,涧,正);辅币(元以下,角/分/厘/毫/丝)。
    var zeroCount;                              // 零计数
    var i, p, d;                                // 循环因子;前一位数字;当前位数字。
    var quotient, modulus;                      // 整数部分计算用:商数、模数。

    // 金额数值转换为字符,分割整数部分和小数部分:整数、小数分开来搞(小数部分有可能四舍五入后对整数部分有进位)。
    var NoneDecLen = (typeof(maxDec) == "undefined" || maxDec == null || Number(maxDec) < 0 || Number(maxDec) > 5);     // 是否未指定有效小数位(true/false)
    parts = dValue.split('.');                      // 数组赋值:(整数部分.小数部分),Array的length=1则仅为整数。
    if (parts.length > 1)
    {
        vInt = parts[0]; vDec = parts[1];           // 变量赋值:金额的整数部分、小数部分
       
        if(NoneDecLen) { maxDec = vDec.length > 5 ? 5 : vDec.length; }                                  // 未指定有效小数位参数值时,自动取实际小数位长但不超5。
        var rDec = Number("0." + vDec);    
        rDec *= Math.pow(10, maxDec); rDec = Math.round(Math.abs(rDec)); rDec /= Math.pow(10, maxDec);  // 小数四舍五入
        var aIntDec = rDec.toString().split('.');
        if(Number(aIntDec[0]) == 1) { vInt = (Number(vInt) + 1).toString(); }                           // 小数部分四舍五入后有可能向整数部分的个位进位(值1)
        if(aIntDec.length > 1) { vDec = aIntDec[1]; } else { vDec = ""; }
    }
    else { vInt = dValue; vDec = ""; if(NoneDecLen) { maxDec = 0; } }
    if(vInt.length > 44) { return "错误:金额值太大了!整数位长【" + vInt.length.toString() + "】超过了上限——44位/千正/10^43(注:1正=1万涧=1亿亿亿亿亿,10^40)!"; }
   
    // 准备各字符数组 Prepare the characters corresponding to the digits:
    digits = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");         // 零~玖
    radices = new Array("", "拾", "佰", "仟");                                              // 拾,佰,仟
    bigRadices = new Array("", "万", "亿", "兆", "京", "垓", "杼", "穰" ,"沟", "涧", "正"); // 万,亿,兆,京,垓,杼,穰,沟,涧,正
    decimals = new Array("角", "分", "厘", "毫", "丝");                                     // 角/分/厘/毫/丝
   
    resAIW = "";  // 开始处理
   
    // 处理整数部分(如果有)
    if (Number(vInt) > 0)
    {
        zeroCount = 0;
        for (i = 0; i < vInt.length; i++)
        {
            p = vInt.length - i - 1; d = vInt.substr(i, 1); quotient = p / 4; modulus = p % 4;
            if (d == "0") { zeroCount++; }
            else
            {
                if (zeroCount > 0) { resAIW += digits[0]; }
                zeroCount = 0; resAIW += digits[Number(d)] + radices[modulus];
            }
            if (modulus == 0 && zeroCount < 4) { resAIW += bigRadices[quotient]; }
        }
        resAIW += "元";
    }
   
    // 处理小数部分(如果有)
    for (i = 0; i < vDec.length; i++) { d = vDec.substr(i, 1); if (d != "0") { resAIW += digits[Number(d)] + decimals[i]; } }
   
    // 处理结果
    if (resAIW == "") { resAIW = "零" + "元"; }     // 零元
    if (vDec == "") { resAIW += "整"; }             // ...元整
    resAIW = CN_SYMBOL + minus + resAIW;            // 人民币/负......元角分/整
    return resAIW;
   
    // 备注:
    /**********************************************************************************
    毫 .... 10^-4 ...... 0.0001
    厘 .... 10^-3 ...... 0.001
    分 .... 10^-2 ...... 0.01
    角 .... 10^-1 ...... 0.1
    -----------------------------
    个位(元)10^0      1
    -----------------------------
    拾 .... 10^1 ...... 10
    佰 .... 10^2 ...... 100
    仟 .... 10^3 ...... 1,000
    万 .... 10^4 ...... 10,000
    亿 .... 10^8 ...... 100,000,000
    兆 .... 10^12 ..... 1,000,000,000,000
    京 .... 10^16 ..... 10,000,000,000,000,000
    垓 .... 10^20 ..... 100,000,000,000,000,000,000             gāi
    杼 .... 10^24 ..... 1,000,000,000,000,000,000,000,000       zhù
    穰 .... 10^28 ..... 10,000,000,000,000,000,000,000,000,000  rǎng 国际制用“艾可萨”,简称“艾”,符号E
    沟 .... 10^32 ..... 100,000,000,000,000,000,000,000,000,000,000
    涧 .... 10^36 ..... 1,000,000,000,000,000,000,000,000,000,000,000,000
    正 .... 10^40 ..... 10,000,000,000,000,000,000,000,000,000,000,000,000,000
    载 .... 10^44
    极 .... 10^48
    恒河沙 ..... 10^52
    阿僧祇 ..... 10^56
    那由他 ..... 10^60
    不可思议 ... 10^64
    无量 ....... 10^68
    大数 ....... 10^72
    **********************************************************************************/
} 

    	function getid(id){
    		return document.getElementById(id);
    		}
    		
    function aa(amount_text,rounding){
    	/*
    	AmountInWords这里有两个值,第一个就是需要转换的数字金额,第二个是四舍五入的设置,我看着像
    	rounding,这个参数是四舍五入
    	*/
    	var tmp = AmountInWords(amount_text.value,rounding);
    	alert(tmp);
    	}

</script>    
  
<body>  
<p>请输入金额:<input id="amount" name="amount" type="text" /></p>
<input type="button" value="提交" onclick="aa(getid('amount'),0);">
</body> 
分享到:
评论

相关推荐

    C#小写金额转换大写金额

    C#将小写金额转换成大写,很高兴能与大家分享我的资源

    js_小写金额转大写金额,大写转小写.js

    通过js代码将小写金额转换成大写金额,将大写金额转换成数字

    人民币小写金额转大写金额(java版)

    ### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...

    DELPHI金额小写转大写

    在 DELPHI 开发环境中,将金额小写转换为大写是常见的财务处理需求,尤其在打印发票或制作财务报表时。这个需求涉及到字符串处理和字符转换的知识点。以下是一些核心概念和实现方法的详细解释: 1. **金额格式**:...

    Java编程-金额小写转大写

    在Java编程中,将金额小写转换为大写是一个常见的需求,特别是在财务系统或银行应用中,为了符合规范,金额通常需要以大写形式展示,防止因大小写混淆导致的错误。本文将深入探讨如何实现这个功能,并通过提供的`...

    金额小写转换成大写

    实现小写的金额转换为大写汉字的金额,本人测试通过。 测试结果: 987345.00--&gt;玖拾捌万柒仟叁佰肆拾伍元整 2989454.09--&gt;贰佰玖拾捌万玖仟肆佰伍拾肆元零玖分

    C#金额小写转大写

    在C#编程环境中,将金额小写转换为大写是一项常见的需求,特别是在财务软件或银行系统中。在Microsoft Visual Studio 2010这个开发环境下,利用.NET Framework 4.0提供的类库和方法,我们可以编写出高效且准确的转换...

    小写金额转换大写金额

    小写金额转换大写金额,小写金额转换大写金额.

    在Excel中将人民币金额小写转成大写

    在Excel中将人民币金额小写转成大写 在Excel中将人民币金额小写转成大写 在Excel中将人民币金额小写转成大写

    小写金额转换为大写金额

    若金额仅有一位小数,如12345.5,大写为“壹万贰仟叁佰肆拾伍元伍角”。 10. **代码实现**:在编程中,可以使用字符串操作和条件判断来实现这个转换。例如,可以将数字拆分为整数部分和小数部分,然后分别处理。...

    小写金额转大写转换器2020新版

    《小写金额转大写转换器2020新版》是一款专为财务人员设计的实用工具,主要用于将日常工作中常见的小写数字金额快速、准确地转换成大写汉字表示,以便于符合中国财务规范,特别是在开具发票和制作小票时确保金额的...

    把大写金额转换成小写的

    将大写金额转换为小写是日常业务处理中常见的一项操作。下面,我们将详细介绍如何进行这种转换,并探讨相关的知识点。 首先,我们需要了解大写金额的规范。在中国,大写金额通常遵循以下规则: 1. 数字“0”对应...

    oracle中将小写金额转换为大写金额函数

    ### Oracle中将小写金额转换为大写金额的函数实现 在Oracle数据库中,有时我们需要将数字金额转换成中文大写形式,特别是在财务系统中,这样的功能非常实用且常见。本文将详细介绍一个自定义的Oracle函数`money_to_...

    小写金额转换成大写金额

    在IT行业中,尤其是在财务软件开发或者处理金融数据时,经常需要将小写金额转换成大写金额,以便于正式的财务报表和凭证的制作。在编程中,这种转换通常通过编写特定的函数来实现。本篇文章将详细讲解如何用PB...

    小写金额转大写

    这个“小写金额转大写”的主题就涉及到这样的一个功能实现。在这个压缩包文件中,很可能包含了一些Java代码示例,用于解决这个问题。 首先,我们要理解金额转换的基本规则。在中国,小写金额通常是指阿拉伯数字(如...

    小写人民币转大写ACCESS函数

    ### 小写人民币转大写ACCESS函数解析 #### 背景介绍 在日常的财务工作中,经常需要将数字格式的金额转换成汉字大写形式,尤其是在开具支票、填写电汇凭证或制作记账凭证时更为常见。这种转换不仅能够提高正式文件的...

    C语言成序设计__实现人民币小写金额与大写金额的转换

    在实现转换时,我们需要将小写金额的每一位数字提取出来,并将其转换为对应的大写金额数字。 在C语言中,我们可以使用数组和循环来实现这种转换。我们可以定义两个数组,一个是中文数字数组,另一个是单位数组。...

    人民币金额小写转换大写工具

    这个“人民币金额小写转换大写工具 1.0 绿色版”就是为了方便用户快速、准确地完成这一转换而设计的。绿色版意味着它是一个无需安装、直接运行的软件,不含有任何恶意插件,也不会在用户的计算机上留下任何痕迹,...

Global site tag (gtag.js) - Google Analytics