搜索: 标题内容作者  
  首页C#教程C#技巧
背景:
阅读新闻

C#中如何把decimal型输出成大写货币格式

[日期:2009-03-11]   来源:互联网整理  作者:佚名   [字体: ]
    新闻简介: 做一个小项目在报表中需要把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。

If you believe an article violates your rights or the rights of others, please contact us.

收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻      
友情链接
本文评论   [发表评论] 全部评论 (0)
赞助商广告
热门评论