提交 298de8a7 authored 作者: 王天霸's avatar 王天霸

精度丢失

上级 0e7fcd05
...@@ -51,6 +51,9 @@ Vue.prototype.msgError = function (msg) { ...@@ -51,6 +51,9 @@ Vue.prototype.msgError = function (msg) {
Vue.prototype.msgInfo = function (msg) { Vue.prototype.msgInfo = function (msg) {
this.$message.info(msg); this.$message.info(msg);
} }
//乘法精度丢失
import cal from '@/utils/calculation';
Vue.prototype.cal = cal
// 动态修改meta // 动态修改meta
import MetaInfo from 'vue-meta-info' import MetaInfo from 'vue-meta-info'
......
var countDecimals = function(num) {
var len = 0;
try {
num = Number(num);
var str = num.toString().toUpperCase();
if (str.split('E').length === 2) {
var isDecimal = false;
if (str.split('.').length === 2) {
str = str.split('.')[1];
if (parseInt(str.split('E')[0]) !== 0) {
isDecimal = true;
}
}
let x = str.split('E');
if (isDecimal) {
len = x[0].length;
}
len -= parseInt(x[1]);
} else if (str.split('.').length === 2) {
if (parseInt(str.split('.')[1]) !== 0) {
len = str.split('.')[1].length;
}
}
} catch (e) {
throw e;
} finally {
if (isNaN(len) || len < 0) {
len = 0;
}
return len;
}
};
var convertToInt = function(num) {
num = Number(num);
var newNum = num;
var times = countDecimals(num);
var temp_num = num.toString().toUpperCase();
if (temp_num.split('E').length === 2) {
newNum = Math.round(num * Math.pow(10, times));
} else {
newNum = Number(temp_num.replace(".", ""));
}
return newNum;
};
var getCorrectResult = function(type, num1, num2, result) {
var temp_result = 0;
switch (type) {
case "add":
temp_result = num1 + num2;
break;
case "sub":
temp_result = num1 - num2;
break;
case "div":
temp_result = num1 / num2;
break;
case "mul":
temp_result = num1 * num2;
break;
}
if (Math.abs(result - temp_result) > 1) {
return temp_result;
}
return result;
};
export default {
//加法
accAdd(num1, num2) {
num1 = Number(num1);
num2 = Number(num2);
var dec1, dec2, times;
try { dec1 = countDecimals(num1) + 1; } catch (e) { dec1 = 0; }
try { dec2 = countDecimals(num2) + 1; } catch (e) { dec2 = 0; }
times = Math.pow(10, Math.max(dec1, dec2));
var result = (this.accMul(num1, times) + this.accMul(num2, times)) / times;
return getCorrectResult("add", num1, num2, result);
},
//减法
accSub(num1, num2) {
num1 = Number(num1);
num2 = Number(num2);
var dec1, dec2, times;
try { dec1 = countDecimals(num1) + 1; } catch (e) { dec1 = 0; }
try { dec2 = countDecimals(num2) + 1; } catch (e) { dec2 = 0; }
times = Math.pow(10, Math.max(dec1, dec2));
var result = Number((this.accMul(num1, times) - this.accMul(num2, times)) / times);
return getCorrectResult("sub", num1, num2, result);
},
//除法
accDiv(num1, num2) {
num1 = Number(num1);
num2 = Number(num2);
var t1 = 0,
t2 = 0,
dec1, dec2;
try { t1 = countDecimals(num1); } catch (e) {}
try { t2 = countDecimals(num2); } catch (e) {}
dec1 = convertToInt(num1);
dec2 = convertToInt(num2);
var result = this.accMul((dec1 / dec2), Math.pow(10, t2 - t1));
return getCorrectResult("div", num1, num2, result);
},
//乘法
accMul(num1, num2) {
num1 = Number(num1);
num2 = Number(num2);
var times = 0,
s1 = num1.toString(),
s2 = num2.toString();
try { times += countDecimals(s1); } catch (e) {}
try { times += countDecimals(s2); } catch (e) {}
var result = convertToInt(s1) * convertToInt(s2) / Math.pow(10, times);
return getCorrectResult("mul", num1, num2, result);
}
}
\ No newline at end of file
...@@ -422,3 +422,4 @@ export function camelCase(str) { ...@@ -422,3 +422,4 @@ export function camelCase(str) {
export function isNumberStr(str) { export function isNumberStr(str) {
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
} }
...@@ -121,7 +121,6 @@ ...@@ -121,7 +121,6 @@
import GoodsParameter from './components/goodsparameter'; import GoodsParameter from './components/goodsparameter';
import Goodsimg from './components/goodsimg2'; import Goodsimg from './components/goodsimg2';
import Goodsaftersale from './components/goodsaftersale'; import Goodsaftersale from './components/goodsaftersale';
export default { export default {
name: 'Index', name: 'Index',
components: { components: {
...@@ -702,7 +701,7 @@ ...@@ -702,7 +701,7 @@
this.goodsAllData.ladder = ladder this.goodsAllData.ladder = ladder
// 进一步处理金额数据 // 进一步处理金额数据
this.goodsAllData.ladder.map((item)=> { this.goodsAllData.ladder.map((item)=> {
item.money = item.money * 10000 / 100 item.money = formatNumber(item.money*100)
return item return item
}); });
} }
...@@ -743,7 +742,7 @@ ...@@ -743,7 +742,7 @@
// 所有数据合并 // 所有数据合并
Object.assign( this.goodsAllData, spxxData, spsjData, ssffData); Object.assign( this.goodsAllData, spxxData, spsjData, ssffData);
debugger
this.goodsAllData.description = spxqData this.goodsAllData.description = spxqData
// 经营类目,服务标签,需要单独处理数据格式 // 经营类目,服务标签,需要单独处理数据格式
...@@ -756,10 +755,11 @@ ...@@ -756,10 +755,11 @@
// 价格数字需要 乘以100 // 价格数字需要 乘以100
if(this.goodsAllData.specs_group && this.goodsAllData.specs_group.length > 0) { if(this.goodsAllData.specs_group && this.goodsAllData.specs_group.length > 0) {
this.goodsAllData.specs_group.forEach((item)=> { this.goodsAllData.specs_group.forEach((item)=> {
item.sc_price = (Number(item.sc_price) * 1000)/10; item.sc_price = Number(this.cal.accMul(item.sc_price,100));
item.price = (Number(item.price) * 1000)/10; item.price = Number(this.cal.accMul(item.price,100)) ;
item.js_price = (Number(item.js_price) * 1000)/10; item.js_price = Number(this.cal.accMul(item.js_price,100));
item.prime_cost = (Number(item.prime_cost) * 1000)/10; debugger
item.prime_cost = Number(this.cal.accMul(item.prime_cost,100));
item.stock = Number(item.stock); item.stock = Number(item.stock);
item.stock_warning = Number(item.stock_warning); item.stock_warning = Number(item.stock_warning);
item.bar_code = Number(item.bar_code); item.bar_code = Number(item.bar_code);
...@@ -771,10 +771,11 @@ ...@@ -771,10 +771,11 @@
delete this.goodsAllData.stock; delete this.goodsAllData.stock;
delete this.goodsAllData.weight; delete this.goodsAllData.weight;
}else { }else {
this.goodsAllData.sc_price = (Number(this.goodsAllData.sc_price) * 1000)/10 this.goodsAllData.sc_price = Number(this.cal.accMul(this.goodsAllData.sc_price,100))
this.goodsAllData.price = (Number(this.goodsAllData.price) * 1000)/10 this.goodsAllData.price = Number(this.cal.accMul(this.goodsAllData.price,100))
this.goodsAllData.js_price = (Number(this.goodsAllData.js_price) * 1000)/10 this.goodsAllData.js_price = Number(this.cal.accMul(this.goodsAllData.js_price,100))
this.goodsAllData.prime_cost = (Number(this.goodsAllData.prime_cost) * 1000)/10 debugger
this.goodsAllData.prime_cost = Number(this.cal.accMul(this.goodsAllData.prime_cost,100))
this.goodsAllData.stock = Number(this.goodsAllData.stock); this.goodsAllData.stock = Number(this.goodsAllData.stock);
this.goodsAllData.stock_warning = Number(this.goodsAllData.stock_warning); this.goodsAllData.stock_warning = Number(this.goodsAllData.stock_warning);
this.goodsAllData.bar_code = Number(this.goodsAllData.bar_code); this.goodsAllData.bar_code = Number(this.goodsAllData.bar_code);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论