在C#中如何把decimal型输出成大写货币格式(非字符串代换方法)

       做一个小项目在报表中需要把decimal型的数据输出成大写方式,为了省事,到网上搜了一下,发现基本上所有给出的方案都是基于字符串代换方式的,虽然都能实现所需要的功能,不过总感觉怪怪的,好像走一段本身不远的路,结果绕了一个大圈子一样。

      最终还是决定亲自动手,丰衣足食。

      通过分析发现如下规律(以例为证):

        23344.323=23344+0.323

        整数部分:

           

             23344=2334*10+4

             2334=233*10+4

             233=23*10+3

             23=2*10+3

             我们看到可以把任何一个整数写成这样的一个两部分之和

                

             可以看出通过23344/10  和 23344%10 得到这两部分

             “后一部分”就是我们要得到的相应的位上的数字

            

             而如果前一部分>=10的话,必须重复这个两个计算步骤(每个步骤都会把“后一部分”存储起来)直到“前一部分”<10

                                        

             我们使用一个byte数组来保存得到的“后一部分” byte[0]保存个位,byte[1]保存十位,依次类推

            

              当我们递归执行完这样一个运算后,我们也就得到了一个byte数组,这个数组中保存了从个位开始的各个位数上的值,这样我们再定义两个数组{ "零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖" }和{ "元", "拾", "佰", "仟", "萬", "拾", "佰", "仟" },我想使用byte的下标和byte元素的值就能转化成相应的大写格式了,当然我们还得注意多个零连住的情况。
          

             小数部分:

                      0.323=3/10+0.23/10

                      0.23=2/10+0.3/10

                      0.3=3/10+0

                     还是两部分,这两部分可以通过   h=0.323*10后取整   和  (0.323-h/10)*10这两个步骤得到

                      可以看出“前一部分”正是我们需要的值,而后一部分如果不等于0的话,仍然需要重复执行这两个步骤,不过对于计算机内的小数格式,我们要等到它为0还是很困难,或者根本就不需要那么高的精度,那么我们可以给定一个精度,当递归调用到一定层数,我们就返回,同样,这次我们也会得到一个byte数组,通过这个数组,我们可以很快转化成大写格式,只不过数组对应的不是{ "元", "拾", "佰"}而是{“角”,“分”,“厘”}了

整数部分的算法代码如下:

private static void Get10(int num) { int head = num / 10; int tail = num % 10; Bits[Length] = (byte)tail; Length++; if (head >= 10) Get10(head); else { Bits[Length] = (byte)head; Length++; } }

小数部分的算法跟这个类似

把这个算法封装成一个NumberFormatter类后,通过测试,一切正常,OK。

            

               

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值