| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2876 人关注过本帖, 2 人收藏
标题:小数转换成大写中文(最终版出炉)
只看楼主 加入收藏
淡漠的茶
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-3-8
收藏
得分:0 
这就防止财务 库管 客户做手脚,涉及到钱这个问题是很现实的
我建议如果你是要打印,你也要封死前面和后面
2008-04-22 19:56
淡漠的茶
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-3-8
收藏
得分:0 
假如一张出库单,如果不封死,你完全可以在前面加,因为在你手里保存的有2-3联,收出库单的只有一联,完全可以说他伪造你签名,可以向他多要钱
或者在库管财务那个环节被变动了,涉及到钱的问题一定要谨慎
2008-04-22 20:00
淡漠的茶
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-3-8
收藏
得分:0 
或者涉及到外贸,原来是人民币结算,给你前面加个美圆符号(要是财务跟客户勾结,三联全加),你哭都不知道找谁哭

[[it] 本帖最后由 淡漠的茶 于 2008-4-22 20:08 编辑 [/it]]
2008-04-22 20:02
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
饿,很有道理。。。

大写的话要看打在哪了。大写一般不太好造假吧。

至于小写,我后面有个单位,前面在去家个¥,呼呼!

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2008-04-22 20:13
淡漠的茶
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-3-8
收藏
得分:0 
大写可以再前面加 一亿这样的
如果实际帐目前都是零,你就没法加,加了也没意义。比如零亿零千零百零十伍万,前面全用大写零封死,这样就只有到伍万才有意义,具化到分其实也是后封的意思,如果只以万为基本单位,到万后面就没了,你要么后面全用零封住(这个时候也需要用“整”这个字封,防止加单位),要么就在万后面用整封住

[[it] 本帖最后由 淡漠的茶 于 2008-4-22 20:25 编辑 [/it]]
2008-04-22 20:20
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
要考虑下的。不过我现在做的单子不太可能出现这种状况。

毕竟我做的单子是双方都应该知道的。

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2008-04-22 20:27
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
最终完美版,无论是什么数据进来,都让你变成中文大写。KAO。

不要太超过大小就好了。哈哈。支持到了万亿这种单位。

原来之前没问问财务,"整"和"零"给我弄错地方了,浪费SO多的时间。o(∩_∩)o...哈哈,好在现在OK了!

大家有兴趣的测试测试,可能还有BUG。。。刚刚还调了2个。汗!

程序代码:
public static string FormatAmount(string amount)
    {
        //定义
        string str = "";
        char[] TOBIG = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
        char[] TOUNIT = { '元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万' };
        char[] TOUNITDE = { '角', '分', '厘', '毫', '丝' };

        string amount1 = "";
        string amount2 = "";
        int dot = amount.IndexOf('.');
        int start = 0;

        //获取非0的开始位置
        for (int i = 0; i <= dot; i++)
            if (amount[i] == '0')
                start++;
            else
                break;

        //把数字分段
        if (dot == -1)
        {
            dot = amount.Length;
            amount1 = amount.Substring(0, dot);
        }
        else
        {
            if (start == 0)
                amount1 = amount.Substring(start, dot);
            else
            {
                int length = dot - start;
                amount1 = amount.Substring(start, length);
            }
            amount2 = amount.Substring(++dot, amount.Length - dot);
        }

        //转化整数位
        int n = 0;
        for (int i = 0; i < amount1.Length; i++)
        {
            int j = amount1.Length - 1 - i;
            n = i;
            if (amount1[i] == '0')
            {
                for (int k = i; k < amount1.Length - 1; k++)
                {
                    if (amount1[i + 1] == '0')
                        i++;
                    else
                        break;
                }
                if (i != n || (amount1.Length - n - 1) % 4 == 0)
                {
                    if (j >= 8)
                        str += TOUNIT[8].ToString();
                    else if (j >= 4)
                        str += TOUNIT[4].ToString();
                    else
                        if (amount1.Length == 1 || i != amount1.Length - 1)
                            str += "";
                }
                else
                    str += TOBIG[0].ToString();
            }
            else
            {
                str += TOBIG[int.Parse(amount1[i].ToString())].ToString();
                str += j == 0 ? "" : TOUNIT[j].ToString();
            }
        }

        if (amount1.Length != 0)
            str += TOUNIT[0].ToString();

        if (amount2.Length == 0)
            str += "整";

        //转化小数位
        if (dot != amount.Length)
        {
            int flag = 0;
            for (int i = 0; i < amount2.Length; i++)
            {
                if (amount2[i] == '0')
                {
                    for (int k = i; k < amount2.Length - 1; k++)
                        if (amount2[i + 1] == '0')
                            i++;
                        else
                            break;
                    if (i == amount2.Length - 1 && flag == 0 && amount1.Length != 0)
                        str += "整";
                    else
                        if (amount1.Length == 0 && flag == 0)
                            str += TOBIG[0].ToString() + TOUNIT[0].ToString();
                        else if (amount1.Length == 0 || i == amount2.Length - 1)
                            str += "";
                        else
                            str += TOBIG[0].ToString();
                }
                else
                {
                    flag = 1;
                    str += TOBIG[int.Parse(amount2[i].ToString())].ToString();
                    str += i > 4 ? "" : TOUNITDE[i].ToString();
                }
            }
        }
        return str;
    }


[[it] 本帖最后由 走刀口→超 于 2008-4-25 16:09 编辑 [/it]]

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2008-04-23 11:13
hebingbing
Rank: 6Rank: 6
来 自:黄土高坡
等 级:贵宾
威 望:27
帖 子:3417
专家分:371
注 册:2007-10-22
收藏
得分:0 
最经在搞一个基于ajax的商城交易平台,我想你的这个东西我或许要用的到的……
呵呵……
2008-04-23 16:09
快速回复:小数转换成大写中文(最终版出炉)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071147 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved