人民币大写转换研究 人民币大写转换是一个实用功能,经过笔者研究,目前大多数软件该功能都有问题,包括一些小工具,在线转换,办公软件。以下是测试报告: 1.某小工具 -922337203685477.5808 零玖贰贰万叁仟叁佰柒拾贰亿零叁佰陆拾捌万伍仟肆佰柒拾柒圆陆角叁分 file:///C:\DOCUME~1\admin\LOCALS~1\Temp\ksohtml\wps_clip_image1.png 2.WPS2007 ET程序 -922337203685477.5808 file:///C:\DOCUME~1\admin\LOCALS~1\Temp\ksohtml\wps_clip_image2.wmf 错误1:小数丢失 错误2: 负符号丢失 922337203685477.5808 正数测试,发现: 错误1:小数丢失 玖佰贰拾贰兆叁仟叁佰柒拾贰亿零叁佰陆拾捌万伍仟肆佰柒拾捌 | 九百二十二兆三千三百七十二亿○三百六十八万五千四百七十八 |
3.百度应用测试 file:///C:\DOCUME~1\admin\LOCALS~1\Temp\ksohtml\wps_clip_image3.wmf 4.excel 2007 922337203685477.5808 file:///C:\DOCUME~1\admin\LOCALS~1\Temp\ksohtml\wps_clip_image4.wmf 结果:错误 ABC拼音只能得到数字中文小写 =============================================== 九二二三三七二○三六八五四七七。五八○八 5.Delphi 某简单算法 function FloatToRMBStr(i:Real):string;
const
d='零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿';
var
m,k:string;
j:integer;
begin
k:=';
m:=floattostr(int(i*100)
for j:=length(m) downto 1 do
k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+
d[(strtoint(m[Length(m)-j+1])+1)*2]+d[(10+j)*2-1]+d[(10+j)*2];
result:=k;
end; 这个算法报告错误: file:///C:\DOCUME~1\admin\LOCALS~1\Temp\ksohtml\wps_clip_image5.wmf 6.正确的改进算法 ===================================================== 922 3372 0368 5477.58 08 玖佰贰 拾贰万叁仟 叁佰柒拾贰亿 零仟叁佰陆拾捌万 伍仟肆佰柒拾柒元 伍角捌分 -922337203685477.5807 负玖佰贰拾贰万叁仟叁佰柒拾贰亿零仟叁佰陆拾捌万伍仟肆佰柒拾柒元伍角捌分 ============也就是可以支持计算机可以表达的currency数据类型 超过currency也可以支持,例子: -1922337203685477.5807 负壹仟玖佰贰拾贰万叁仟叁佰柒拾贰亿零仟叁佰陆拾捌万伍仟肆佰柒拾柒元伍角捌分 基本可以支持到浮点数17.2位有效数字 人民币大写转换程序 作者:steven 保留所有权利 QQ:1565498246 2013-10-14
详细信息见附件:
|