前段时间需要在系统中做一个人民币自动转大写的功能,同事给的代码有些不对劲,于是我找来了AI帮忙。。。(其实之前我给他参考的JS也是另一个AI给的,我没测过)
版本1
AI提供的第1版代码结果是这样的,连位数都数不清楚,我告诉了它,然后它很虚心的承认了错误
function convertCurrencyToChinese(amount) {
// 检查输入是否合法
if(isNaN(amount) || amount < 0 || amount.toString().indexOf('.') > 12){
return "无效输入";
}
//汉字的数字
var CN_NUMBER = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
//货币单位
var CN_INTEGER = ['圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','兆','拾','佰','仟'];
var integerNum = Math.floor(amount*100);
var result = '';
for(var i = 0;i < CN_INTEGER.length && integerNum > 0; i++){
var intDiv = parseInt(integerNum % 10);
result = CN_NUMBER[intDiv] + CN_INTEGER[i] + result;
integerNum = parseInt(integerNum/10);
}
result = result.replace(/零[拾佰仟]/g, '零').replace(/圆零圆/, '圆').replace(/零兆|零亿|零万|零圆/, '圆').replace(/亿万/, '亿').replace(/零+/g, '零').replace(/零圆/, '圆');
return result === '' ? "零圆" : result;
}
// 当输入框的值发生变化时,调用转换函数并显示在页面上
var inputElement = document.getElementById('yourInputId');
var outputElement = document.getElementById('outputId');
inputElement.addEventListener('input', function() {
var amount = parseFloat(this.value);
var result = convertCurrencyToChinese(amount);
outputElement.textContent = result;
});
版本2
勇于快速改正的AI秒给了版本2,然而识别了角和分,但还是不识位数
版本3
第3版,没有大问题,但转换了一个零角X分出来。。。。
版本4
零角。。。 死不悔改还非常自信,看来提示语给的不够精准
版本5
这次AI终于改对了,给它反馈一个结果……
第5版终极代码
function convertCurrencyToChinese(amount) {
// 检查输入是否合法
if(isNaN(amount) || amount < 0 || amount.toString().indexOf('.')>15){
return "无效输入";
}
//汉字的数字
var CN_NUMBER = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
//货币单位
var CN_INTEGER = ['圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','兆','拾','佰','仟'];
// 货币单位角、分
var CN_DECIMAL = ['角','分'];
var integerNum = Math.floor(amount);
var decimalNum = Math.round((amount - integerNum) * 100);
var result = '';
// 处理整数部分
for(var i = 0; i < CN_INTEGER.length && integerNum > 0; i++){
var intDiv = parseInt(integerNum % 10);
result = CN_NUMBER[intDiv] + CN_INTEGER[i] + result;
integerNum = parseInt(integerNum/10);
}
// 如果小数部分为0,则添加“整”
if (decimalNum === 0) {
result += '整';
} else {
// 处理角和分
result += CN_NUMBER[Math.floor(decimalNum / 10)] + CN_DECIMAL[0];
if (decimalNum % 10 !== 0) {
result += CN_NUMBER[decimalNum % 10] + CN_DECIMAL[1];
}
}
result = result.replace(/零[拾佰仟]/g, '零').replace(/零[万亿兆]/g, '零').replace(/零+/g, '零').replace(/零圆/g, '圆').replace(/零(角|分)/g, '');
return result.replace(/零圆/g, '圆');
}
var amount = 987654321.09;
var result = convertCurrencyToChinese(amount);
console.log(result); // 输出:玖亿捌仟柒佰陆拾伍万肆仟叁佰贰拾壹圆玖分
OVER
有兴趣的朋友可以参考下。。。