我在Crystal Report中使用ToWords功能将数字转换为单词。金额有时也可能包含十进制值,因此我已经包含一个IF条件来评估它只在必要时包括小数部分。
但是我还需要添加一个“和”单词来分隔单词中的金额,以便更容易阅读。
对于Eg。 38426应显示为“三万八千二百四十六”。此刻的内容为“三万八千二百四十六”。
这是我目前的代码。
NUMBERVAR amount := 38246;
NUMBERVAR decimals := (Round(amount,2) - Int(amount)) * 100;
STRINGVAR words := 'Rupees';
words := words & ' ' & TOWORDS(amount,0);
IF(decimals > 0) THEN words := words & ' and ' &TOWORDS(decimals,0) & ' cents';
words := PROPERCASE(words & ' only');
答案 0 :(得分:2)
创建自定义函数:
//Wordy()
Function (Numbervar Value)
If Remainder(Value,1)=0 Then
ProperCase(ToWords(Value,0)) + " Dollars"
Else
Replace(Replace(ProperCase(ToWords(Value,2)), "And", "Dollars And"), "/ 100", "Cents")
在公式字段中使用函数:
// Fifty-Five Thousand One Hundred Twenty-Three Dollars
Wordy(55123.00)
// Fifty-Five Thousand One Hundred Twenty-Three Dollars And 55 Cents
Wordy(55123.55)
答案 1 :(得分:0)
这很棘手但很简单...... 1.转换38426以拖曳功能的默认格式显示。 这被呈现为"三十八万四千二百六十四" 2.将此默认结果放入变量say" txt" 3.使用内部功能"替换"搜索单词" Hundred"并将其替换为"百和"。这解决了这个问题。
实际细节......
currencyvar tt;
currencyvar dect;
stringvar txt;
tt := 38426 ;
dect := tt - Truncate(tt);
tt := truncate(tt);
dect := dect * 100;
if dect = 0 then //default format
ProperCase (ToWords (tt,0 ) + ' Dollars Only' ) // without decimal (cents)
else
txt := ProperCase (ToWords (tt,0) + ' Dollars, ' + ToWords(dect,0) + ' cents Only');
//include "and"
Replace (txt,"Hundred" ,"Hundred and" )
编辑: 以上是对此处发现的解决方案的改进 http://www.c-sharpcorner.com/forums/thread/235835/number-to-words-in-crystal-report.aspx