Socket
Socket
Sign inDemoInstall

xmcommon

Package Overview
Dependencies
2
Maintainers
1
Versions
65
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.17 to 0.0.18

33

example/testcurr.js

@@ -19,25 +19,20 @@

m.push(tt);
m.push(tt.div(100));
let ccc = new CNYCurrency();
let y = new CNYCurrency(null);
m.push(ccc);
m.push(new CNYCurrency(123456789.00));
m.push(new CNYCurrency(12000.12));
m.push(new CNYCurrency(10000020.10));
m.push(new CNYCurrency(10020.01));
m.push(new CNYCurrency(12000.01));
m.push(new CNYCurrency(1409.50));
m.push(new CNYCurrency(19.50));
m.push(new CNYCurrency(6007.14));
m.push(new CNYCurrency(16409.02));
m.push(new CNYCurrency(325.04));
for(let mm of m) {
console.log(mm.value, mm.intValue, mm.toString(), mm.format(true, true), mm.Chinese());
let c2 = mm.Chinese();
console.log(mm.isErr,mm.value, mm.format(true, true), c2, mm.errMsg);
}
for(let i = 0; i < 100000000; i++) {
ccc.intValue = i;
let y = ccc.yuan;
let c = ccc.cent;
let s = y.toString() + '.' + c.toString().padStart(2, '0');
if (i % 1000 === 0) {
console.log(i);
}
if(s !== ccc.toString()) {
console.log(console.log(ccc.toString(), s, ccc.yuan, ccc.cent));
}
}
console.log('finish');

@@ -1,2 +0,2 @@

const _ = require("lodash");
/** 货币精度 */

@@ -14,2 +14,25 @@ const Precision = 100;

/**
* 将值转换为数字,
* - 仅限cnycurrency这个文件专用,外部请不要使用
* @param {number | string} paramValue 值
* @return {{result: boolean, value: number}} 转换后的值
* - result === true 表示转换有效
* - result === false 表示转换失败
*/
function __toNumber(paramValue) {
let r = {
result: false,
value: 0
}
if(_.isNumber(paramValue)) {
r.value = paramValue;
}
else {
r.value = Number.parseFloat(paramValue);
}
r.result = !Number.isNaN(r.value);
return r;
}
/**
* 解析货币,只保留两位小数

@@ -217,10 +240,15 @@ * 要求值的范围在[90071992547409.91,-90071992547409.91],超过该值,则视为出错

* 乘一个值
* @param {number | string | CNYCurrency} paramNumber 值
* @param {number | string} paramNumber 值
* @return {CNYCurrency} 返回计算后的Currency对象
*/
mul(paramNumber) {
let r = new CNYCurrency(paramNumber);
if(!r.isErr && !this.isErr) {
r.m_IntValue = Math.round(this.value * r.value * Precision);
let r = new CNYCurrency();
let v = __toNumber(paramNumber);
if(v.result) {
r.assign(this.value * v.value);
}
else {
r.m_errMsg = `${paramNumber} is invalid number`;
r.m_ErrFlag = true;
}
return r;

@@ -230,28 +258,43 @@ }

* 自乘一个值
* @param {number | string | CNYCurrency} paramNumber 值
* @return {CNYCurrency} 返回计算后的Currency对象
* @param {number | string} paramNumber 值
* @return {boolean} 计算结果
* - true 表示计算成功
* - false 表示计算失败
*/
selfMul(paramNumber) {
let r = new CNYCurrency(paramNumber);
if(!r.isErr && !this.isErr) {
this.m_IntValue = Math.round(this.value * r.value * Precision);
let v = __toNumber(paramNumber);
if(!v.result) {
return false;
}
return this;
let r = new CNYCurrency(v.value * this.value);
if(r.isErr) {
return false;
}
else {
this.assign(r);
return true;
}
}
/**
* 除以一个值
* @param {number | string | CNYCurrency} paramNumber 值
* @param {number | string} paramNumber 值
* @return {CNYCurrency} 返回计算后的Currency对象
*/
div(paramNumber) {
let r = new CNYCurrency(paramNumber);
if(!r.isErr && !this.isErr) {
if(r.m_IntValue === 0) {
let r = new CNYCurrency();
let v = __toNumber(paramNumber);
if(v.result) {
if(v.value === 0) {
r.m_errMsg = `${paramNumber} is zero!;`;
r.m_ErrFlag = true;
r.m_ErrMsg = `${paramNumber} => ${r.value} is zero!`;
} else {
r.assign(this.value / v.value);
}
else {
r.m_IntValue = Math.round(this.value / r.value * Precision);
}
}
else {
r.m_errMsg = `${paramNumber} is invalid number.`;
r.m_ErrFlag = true;
}
return r;

@@ -261,17 +304,23 @@ }

* 自除以一个值
* @param {number | string | CNYCurrency} paramNumber 值
* @return {CNYCurrency} 返回计算后的Currency对象
* @param {number | string} paramNumber 值
* @return {boolean} 计算结果
* - true 表示计算成功
* - false 表示计算失败
*/
selfDiv(paramNumber) {
let r = new CNYCurrency(paramNumber);
if(!r.isErr && !this.isErr) {
if(r.m_IntValue === 0) {
r.m_ErrFlag = true;
r.m_ErrMsg = `${paramNumber} => ${r.value} is zero!`;
}
else {
this.m_IntValue = Math.round(this.value / r.value * Precision);
}
let v = __toNumber(paramNumber);
if(!v.result) {
return false;
}
return this;
if(v.value === 0) {
return false;
}
let r = new CNYCurrency(this.value / v.value);
if(r.isErr) {
return false;
}
else {
this.assign(r);
return true;
}
}

@@ -297,28 +346,103 @@ /**

}
/**
* 生成中文大写数字
* - 引用来源:https://www.jb51.net/article/89661.htm
* - 增加在元后,角为0的情况增加0,如0.01为零元零角
* @param {string} paramNegative 如果是负数时,前面的前缀
* @return {string} 中文大写结果
*/
Chinese() {
Chinese(paramNegative = '负') {
//汉字的数字
let cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
//基本单位
let cnIntRadice =['', '拾', '佰', '仟'];
//对应整数部分扩展单位
let cnIntUnits = ['', '万', '亿', '兆'];
//对应小数部分单位
let cnDecUnits = ['角', '分', '毫', '厘'];
//整数金额时后面跟的字符
let cnInteger = '整';
//整型完以后的单位
let cnIntLast = '元';
//最大处理的数字
let maxNum = 999999999999999.9999;
//金额整数部分
let integerNum;
//金额小数部分
let decimalNum;
//输出的中文金额字符串
let chineseStr = '';
//分离金额后用的数组,预定义
let parts;
let negative = '';
if(this.intValue < 0) {
negative = '负';
negative = paramNegative;// '负';
}
let n = Math.abs(this.value).toFixed(2);;
let unit = "仟佰拾京仟佰拾兆仟佰拾亿仟佰拾万仟佰拾元角分";
let str = "";
n += "00";
let p = n.indexOf('.');
if (p >= 0) {
n = n.substring(0, p) + n.substr(p+1, 2);
let money = Math.abs(this.value);
if (money >= maxNum) {
//超出最大处理数字
return negative + '';
}
if (money == 0) {
chineseStr = negative + cnNums[0] + cnIntLast + cnInteger;
return chineseStr;
}
//转换为字符串
money = money.toString();
if (money.indexOf('.') == -1) {
integerNum = money;
decimalNum = '';
} else {
parts = money.split('.');
integerNum = parts[0];
decimalNum = parts[1].substr(0, 4);
}
//获取整型部分转换
if (parseInt(integerNum, 10) > 0) {
let zeroCount = 0;
let IntLen = integerNum.length;
for (let i = 0; i < IntLen; i++) {
let n = integerNum.substr(i, 1);
let p = IntLen - i - 1;
let q = p / 4;
let m = p % 4;
if (n == '0') {
zeroCount++;
} else {
if (zeroCount > 0) {
chineseStr += cnNums[0];
}
//归零
zeroCount = 0;
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
}
if (m == 0 && zeroCount < 4) {
chineseStr += cnIntUnits[q];
}
}
chineseStr += cnIntLast;
}
//小数部分
if (decimalNum != '') {
let decLen = decimalNum.length;
for (let i = 0; i < decLen; i++) {
let n = decimalNum.substr(i, 1);
if (n != '0') {
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
}
else {
if (i === 0) {
chineseStr += cnNums[0];
}
unit = unit.substr(unit.length - n.length);
for (var i=0; i < n.length; i++) {
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
}
}
}
return negative + str.replace(/零(仟|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
if (chineseStr == '') {
chineseStr += cnNums[0] + cnIntLast + cnInteger;
} else if (decimalNum == '') {
chineseStr += cnInteger;
}
return negative + chineseStr;
}

@@ -325,0 +449,0 @@ /**

{
"name": "xmcommon",
"version": "0.0.17",
"version": "0.0.18",
"description": "javascript common lib for es6",

@@ -27,3 +27,3 @@ "main": "index.js",

"dependencies": {
"@types/node": "^10.14.4",
"@types/node": "^10.14.10",
"lodash": "^4.17.11"

@@ -30,0 +30,0 @@ },

@@ -34,2 +34,9 @@ # xmcommon

## 0.0.18
- 2019-06-26
- \* 原生成中文货币大写存在问题,重新找了一个新的版本替换 来源:https://www.jb51.net/article/89661.htm
- \+ 增加多情况货币测试
- \* 修复乘除的bug, 对于自乘与自除,返回的是boolean,判断成功失败
## 0.0.17

@@ -36,0 +43,0 @@

@@ -1092,10 +1092,12 @@ // Type definitions for xmcommon 0.0

*/
public mul(paramNumber: number | string | CNYCurrency | null | undefined): CNYCurrency;
public mul(paramNumber: number | string): CNYCurrency;
/**
* 自乘一个值
* @param paramNumber 值
* @return {boolean} 计算结果
* - true 表示计算成功
* - false 表示计算失败
*/
public selfMul(paramNumber: number | string): boolean;
/**
* 自乘一个值
* @param paramNumber 值
* @return 返回计算后的Currency对象
*/
public selfMul(paramNumber: number | string | CNYCurrency | null | undefined): CNYCurrency;
/**
* 除以一个值

@@ -1105,10 +1107,12 @@ * @param paramNumber 值

*/
public div(paramNumber: number | string | CNYCurrency | null | undefined): CNYCurrency;
public div(paramNumber: number | string): CNYCurrency;
/**
* 自除以一个值
* @param {number | string} paramNumber 值
* @return {boolean} 计算结果
* - true 表示计算成功
* - false 表示计算失败
*/
public selfDiv(paramNumber: number | string): CNYCurrency;
/**
* 自除以一个值
* @param paramNumber 值
* @return 返回计算后的Currency对象
*/
public selfDiv(paramNumber: number | string | CNYCurrency | null | undefined): CNYCurrency;
/**
* 货币的整数部分

@@ -1122,6 +1126,9 @@ * @return 返回整数

public readonly cent: number;
/**
* 生成中文大写数字
* @return 中文大写结果
*/
/**
* 生成中文大写数字
* - 引用来源:https://www.jb51.net/article/89661.htm
* - 增加在元后,角为0的情况增加0,如0.01为零元零角
* @param {string} paramNegative 如果是负数时,前面的前缀
* @return {string} 中文大写结果
*/
public Chinese(): string;

@@ -1128,0 +1135,0 @@ /**

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc