币种大写算法(js)
注意事项:小数精度处理问题,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)的更多相关文章
- 微信小程序存放视频文件到阿里云用到算法js脚本文件
peterhuang007/weixinFileToaliyun: 微信小程序存放视频文件到阿里云用到算法js脚本文件 https://github.com/peterhuang007/ ...
- JS设置首字母大写算法
返回一个字符串,确保字符串的每个单词首字母都大写,其余部分小写. 像'the'和'of'这样的连接符同理. function titleCase(str) { //把字符串所有的字母变为小写,并根据空 ...
- 几种常见算法js
没有系统地总结过js算法,虽然在项目中陆陆续续的也用过好多算法,有一次去一家公司面试的时候,面试官说想谈谈算法,有点懵了,所以接下来的面试中谈的也有点被动,避免下次再碰到这种情况,今天决定好好的总结下 ...
- 算法——js(Fibonacci数列)
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指 ...
- 斐波那契数列公式算法-JS实现
之前算斐波那契数列都是算前两个数相加实现的 比如0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181 ...
- 将单词首字母大写的JS脚本工具
<html> <head> <title>首字母全改为大写JS脚</title> <SCRIPT LANGUAGE="JavaScrip ...
- 数据结构与算法JS实现
行解算法题,没错,就是这么方便. 当然也可以使用 Node.js 环境来执行,具体参考Node.js官方文档即可. 二 对象和面向对象编程 js中5种数据类型,并没有定义更多的数据类型,但是运用j ...
- 八大排序算法JS及PHP代码实现
从学习数据结构开始就接触各种算法基础,但是自从应付完考试之后就再也没有练习过,当在开发的时候也是什么时候使用什么时候去查一下,现在在学习JavaScript,趁这个时间再把各种基础算法整理一遍,分别以 ...
- KMP算法JS实现
参考阮一峰的<字符串匹配的KMP算法>,用JS实现一版,备忘~ // 主串 let str1 = 'BBC ABCDAB ABCDABCDABDEDC'; // 模式串 let str2 ...
随机推荐
- 让 Nginx 支持 WAF 防护功能实战
ngx_lua_waf 安装说明文档 作者github地址: https://github.com/loveshell/ngx_lua_waf ———————————————————————————— ...
- VBA读写XML文件
'Write XML file Sub WriteXML(fpa$, fn$) Dim xmlfile As String xmlfile = ThisWorkbook.Path & &quo ...
- eclipse中Maven web项目的目录结构浅析
刚开始接触maven web项目的时候,相信很多人都会被它的目录结构迷惑. 为了避免初学者遇到像我一样的困扰,我就从一个纯初学者的视角,来分析一下这个东西. 1,比如说,我们拿一个常见的目录结构来看, ...
- 时间复杂度O(n)
时间复杂度 算法分析 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法.一个算法的评价主要从时间复杂度和空间复杂度来考虑. 一.时间复 ...
- 综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
来源:http://t.cn/RVDWcfe 一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写 ...
- 实习第一个月总结(const关键字、条件编译、volatile关键字、#和##的作用、函数指针)
C语言中const关键字的作用: 修饰局部变量或者全局变量,表示变量n的值不能被改变了 修饰指针,分为常量指针与指针常量,也可以两者结合 常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变, ...
- python下对目录&文件的操作
Windows桌面上: 总文件夹 子文件夹01 文档01.txt-------------------------------------------------------------------- ...
- 第十四周课程总结&实验报告
简单记事本的实现 实验源码 主类 package test1; import javax.swing.JFrame; import javax.swing.JTextArea; public clas ...
- Design Snake Game
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
- 【Python】【demo实验29】【练习实例】【使用turtle画五角星】
原题: 使用turtle画五角星: 我的代码: #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 -*- from turtle impor ...