需求描述
外贸企业,或者涉外单位的英文合同或者形式发票,总是需要显示英文的数字大写。 如下图:
这是我的 Proforma Invoice 形式发票表的一个截图,里面存放这总金额数字字段。
另外一个英文大写字段,是文本框字段,用来存放转换后的英文大写。
怎么用明道云的工作流 + 代码块来实现呢?
工作流如下图:
、
配置表触发方式为 新增或者更新总金额字段触发就可以。
主要是代码块设置如下图:
其中 num 动态值就是你的需要转换成英文大写的阿拉伯数字总金额。第一次测试的时候,可以给 num 一个具体的值,而不是动态的字段内容,例如 1231231 这样。
具体的代码如下:
//var num='128040.00';
var endresult = englishmoney(num);
function englishmoney(num) {
var i;
var hundreds;
var tenth;
var one;
var thousand;
var million;
var billion;
var numbers;
var s
var result;
var str= '000000000000000' + num.toString();
numbers = 'one two three four five ' + 'six seven eight nine ten ' + 'eleven twelve thirteen fourteen fifteen ' + 'sixteen seventeen eighteen nineteen ' + 'twenty thirty forty fifty ' + 'sixty seventy eighty ninety ';
String.prototype.Trim = function() {
return this.replace(/^\s+|\s+$/g, "");
}
String.prototype.Ltrim = function() {
return this.replace(/^\s+/g, "");
}
String.prototype.Rtrim = function() {
return this.replace(/\s+$/g, "");
}
s = str.substring(str.length - 15, str.length);
billion = parseInt(s.substring(0, 3)); //将12位整数分成4段:十亿、百万、千、百十个
million = parseInt(s.substring(3, 6));
thousand = parseInt(s.substring(6, 9));
result = '';
i = 0;
while (i <= 3) {
hundreds = parseInt(s.substring(i * 3, i * 3 + 1)); //百位0-9
tenth = parseInt(s.substring(i * 3 + 1, i * 3 + 2));
if (tenth == 1) {
one = 10 + parseInt(s.substring(i * 3 + 2, i * 3 + 3));
} else {
one = 0 + parseInt(s.substring(i * 3 + 2, i * 3 + 3));
}
// one=(CASE @tenth WHEN 1 THEN 10 ELSE 0 END)+CAST(SUBSTRING(@s,@i*3+3,1) AS int)--个位0-19
if (tenth <= 1) {
tenth = 0;
}
// tenth=(CASE WHEN @tenth<=1 THEN 0 ELSE @tenth END)--十位0、2-9f
if ((i == 1 && parseInt(billion) > 0 && (parseInt(million) > 0 || parseInt(thousand) > 0 || parseInt(hundreds) > 0)) || (i == 2 && (parseInt(billion) > 0 || parseInt(million) > 0) && (parseInt(thousand) > 0 || parseInt(hundreds) > 0)) || (i == 3 && (parseInt(billion) > 0 || parseInt(million) > 0 || parseInt(thousand) > 0) && (parseInt(hundreds) > 0))) {
result = result + ' ';
} //--百位不是0则每段之间加连接符,
if (i == 3 && (billion > 0 || million > 0 || thousand > 0) && (hundreds == 0 && (tenth > 0 || one > 0))) {
result = result + ' and ';
} //--百位是0则加连接符AND
if (hundreds > 0) {
result = result + numbers.substring(hundreds * 10 - 10, hundreds * 10).Rtrim() + ' hundred';
}
if (tenth >= 2 && tenth <= 9) {
if (hundreds > 0) {
result = result + ' and ';
}
result = result + numbers.substring(tenth * 10 + 170, tenth * 10 + 180).Rtrim();
}
if (one >= 1 && one <= 19) {
if (tenth > 0) {
result = result + '-';
} else {
if (hundreds > 0) {
result = result + ' and ';
}
}
result = result + numbers.substring(one * 10 - 10, one * 10).Rtrim();
}
//alert(result);
// i=i+1;
// }
if (i == 0 && parseInt(billion) > 0) {
result = result + ' billion';
}
if (i == 1 && parseInt(million) > 0) {
result = result + ' million';
}
if (i == 2 && parseInt(thousand) > 0) {
result = result + ' thousand';
}
i = i + 1;
}
if (s.substring(13, 15) != '00') {
result = result + ' point ';
if (s.substring(13, 14) == '0') {
result = result + 'zero';
} else {
result = result + numbers.substring(parseInt(s.substring(13, 14)) * 10 - 10, parseInt(s.substring(13, 14)) * 10).Rtrim();
}
if (s.substring(14, 15) != '0') {
result = result + ' ' + numbers.substring(parseInt(s.substring(14, 15)) * 10 - 10, parseInt(s.substring(14, 15)) * 10).Rtrim();
}
}
return result;
}
output = { result: endresult.toUpperCase()}
更新表单里面的英文大写文本框
特此感谢:衣锦夜行、Anne 熊_敏 的大力支持和耐心讲解。