注意事项:小数精度处理问题,n*10出现精度误差,如1.88*10计算得18.799999999999997,实际想要的数据是18.8;
    
思路一:小数变成整数(通过字符串处理),计算后,变成小数; 思路二:用科学计算法进行计算。
export function RMBFitter(n){
/**金额大写的转换 */
var fraction = ['角', '分'];
var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
var unit = [ ['元', '万', '亿'], ['', '拾', '佰', '仟'] ];
//var head = n < 0? '欠': '';
n = Math.abs(n);
var s = '';
// if (n > Math.floor(n)) {
// let str = n * 100 + ''
// let numlist = str.substr(-2, 2).split('')
// // 这里在前面取数的时候定死了2位小数。0
// let num0 = numlist[0] - 0
// let num1 = numlist[1] - 0
// if (num1 === 0 && num0 === 0) {
// s = ''
// } else if (num1 === 0) {
// s = digit[num0] + '角'
// } else {
// s = digit[num0] + '角' + digit[num1] + '分'
// }
// }
// console.log((digit[Math.floor(n * Math.pow(10, 1)) % 10] + fraction[0]).replace(/零./, ''));
// console.log((digit[Math.floor(n * Math.pow(10, 2)) % 10] + fraction[1]).replace(/零./, ''));
for (var i = 0; i < fraction.length; i++)
{
// console.log(digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]);
s += (digit[Math.floor(n * Math.pow(10, i+1)) % 10] + fraction[i]).replace(/零./, '');
} s = s || '整';
n = Math.floor(n);
for (var i = 0; i < unit[0].length && n > 0; i++)
{
var p = '';
for (var j = 0; j < unit[1].length && n > 0; j++)
{
p = digit[n % 10] + unit[1][j] + p;
n = Math.floor(n / 10);
}
s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
}
//return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
var result = s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
if(result.indexOf('分')>0&&result.indexOf('角')<0){
result = result.replace(/元/g, '元零');
}
return result;
}

  以上处理方式在处理小数的时候,会有精度问题(2374.24),因此需要单独处理小数部分,先将小数部分变成字符串,然后再做处理

  let nString = n + '';
if(nString.indexOf('.')>-1){
nString = nString.split('.');
nString = nString[1];
if(nString.length>2){
alert('请确保输入的值不能超过两位小数,否则无法核算成大写金额');
return;
}
if(nString.length>1){
let jiao = nString[0];
let fen = nString[1];
s = (digit[Number(jiao)] + '角' + digit[Number(fen)]+ '分').replace(/零./, '');
}else{
let jiao = nString;
s = (digit[Number(jiao)] + '角');
}
}

币种大写算法(js)的更多相关文章

  1. 微信小程序存放视频文件到阿里云用到算法js脚本文件

           peterhuang007/weixinFileToaliyun: 微信小程序存放视频文件到阿里云用到算法js脚本文件 https://github.com/peterhuang007/ ...

  2. JS设置首字母大写算法

    返回一个字符串,确保字符串的每个单词首字母都大写,其余部分小写. 像'the'和'of'这样的连接符同理. function titleCase(str) { //把字符串所有的字母变为小写,并根据空 ...

  3. 几种常见算法js

    没有系统地总结过js算法,虽然在项目中陆陆续续的也用过好多算法,有一次去一家公司面试的时候,面试官说想谈谈算法,有点懵了,所以接下来的面试中谈的也有点被动,避免下次再碰到这种情况,今天决定好好的总结下 ...

  4. 算法——js(Fibonacci数列)

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1]  )以兔子繁殖为例子而引入,故又称为“兔子数列”,指 ...

  5. 斐波那契数列公式算法-JS实现

    之前算斐波那契数列都是算前两个数相加实现的 比如0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181 ...

  6. 将单词首字母大写的JS脚本工具

    <html> <head> <title>首字母全改为大写JS脚</title> <SCRIPT LANGUAGE="JavaScrip ...

  7. 数据结构与算法JS实现

      行解算法题,没错,就是这么方便. 当然也可以使用 Node.js 环境来执行,具体参考Node.js官方文档即可. 二 对象和面向对象编程 js中5种数据类型,并没有定义更多的数据类型,但是运用j ...

  8. 八大排序算法JS及PHP代码实现

    从学习数据结构开始就接触各种算法基础,但是自从应付完考试之后就再也没有练习过,当在开发的时候也是什么时候使用什么时候去查一下,现在在学习JavaScript,趁这个时间再把各种基础算法整理一遍,分别以 ...

  9. KMP算法JS实现

    参考阮一峰的<字符串匹配的KMP算法>,用JS实现一版,备忘~ // 主串 let str1 = 'BBC ABCDAB ABCDABCDABDEDC'; // 模式串 let str2 ...

随机推荐

  1. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-5.PageHelper分页插件使用

    笔记 5.PageHelper分页插件使用     简介:讲解开源组件,mybaits分页插件的使用 1.引入依赖             <!-- 分页插件依赖 -->          ...

  2. [ML] Load and preview large scale data

    Ref: [Feature] Preprocessing tutorial 主要是 “无量纲化” 之前的部分. 加载数据 一.大数据源 http://archive.ics.uci.edu/ml/ht ...

  3. openstack核心组件--nova计算服务(3)

    一.nova介绍:       Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova ...

  4. R语言与概率统计(三) 多元统计分析(上)

    > #############6.2一元线性回归分析 > x<-c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0. ...

  5. 20190905 - Uncaught SyntaxError: Unexpected token < 的解决

    问题:Uncaught SyntaxError: Unexpected token < index:1 原因:js 路径不对

  6. loadrunner脚本因为没有token报错

    目录 场景 解决过程 解决方案 总结 场景 用loadrunner11录制脚本,处理后回放,加上检查点,报错找不到检查点对应的内容,去掉检查点,没有报错,但是打开页面没有该操作的痕迹.手动在页面上操作 ...

  7. eclipse上新建Maven项目报错及解决

    Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of ...

  8. (长期更新)【python数据建模实战】零零散散问题及解决方案梳理

    注1:本文旨在梳理汇总出我们在建模过程中遇到的零碎小问题及解决方案(即当作一份答疑文档),会不定期更新,不断完善, 也欢迎大家提问,我会填写进来. 注2:感谢阅读.为方便您查找想要问题的答案,可以就本 ...

  9. 【图像处理】FFmpeg解码H264及swscale缩放详解

      http://blog.csdn.net/gubenpeiyuan/article/details/19548019 主题 FFmpeg 本文概要: 本文介绍著名开源音视频编解码库ffmpeg如何 ...

  10. prometheus 监控 jar应用服务 + 修改监听IP和端口

    1.修改服务的启动脚本 [root@do1cloud01 init.d]# vim learn-school nohup ${JAVA_HOME}/bin/java -javaagent:/usr/l ...