Browse Source

fix(float calculate bug): fix it

master
wbfsa 5 years ago
parent
commit
ef2a96a7cd
  1. 91
      src/function/func.js
  2. 12
      src/function/functionImplementation.js
  3. 3
      src/global/formula.js
  4. 8
      src/global/setdata.js

91
src/function/func.js

@ -190,7 +190,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
value = parseFloat(fp[m][n]) * parseFloat(tp[m][n]);
value = luckysheet_calcADPMM(fp[m][n], sp, tp[p][n]);//parseFloat(fp[m][n]) * parseFloat(tp[m][n]);
}
else{
value = error.v;
@ -217,7 +217,7 @@ function luckysheet_compareWith() {
tp[p][n] = booleanToNum(tp[p][n]);
if(isRealNum(fp[m][p]) && isRealNum(tp[p][n])){
value += parseFloat(fp[m][p]) * parseFloat(tp[p][n]);
value += luckysheet_calcADPMM(fp[m][p], sp, tp[p][n]);//parseFloat(fp[m][p]) * parseFloat(tp[p][n]);
}
else{
value += error.v;
@ -249,7 +249,7 @@ function luckysheet_compareWith() {
tp[m][p] = booleanToNum(tp[m][p]);
if(isRealNum(tp[m][p]) && isRealNum(fp[p][n])){
value += parseFloat(tp[m][p]) * parseFloat(fp[p][n]);
value += luckysheet_calcADPMM(fp[p][n], sp, tp[m][p]);//parseFloat(tp[m][p]) * parseFloat(fp[p][n]);
}
else{
value += error.v;
@ -282,7 +282,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
value = parseFloat(fp[m][n]) * parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);//parseFloat(fp[m][n]) * parseFloat(tp[n]);
}
else{
value = error.v;
@ -307,7 +307,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[m][0]) && isRealNum(tp[n])){
value = parseFloat(fp[m][0]) * parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);// parseFloat(fp[m][0]) * parseFloat(tp[n]);
}
else{
value = error.v;
@ -335,7 +335,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
value = parseFloat(fp[n]) * parseFloat(tp[m][n]);
value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);// parseFloat(fp[n]) * parseFloat(tp[m][n]);
}
else{
value = error.v;
@ -360,7 +360,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[n]) && isRealNum(tp[m][0])){
value = parseFloat(fp[n]) * parseFloat(tp[m][0]);
value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);//parseFloat(fp[n]) * parseFloat(tp[m][0]);
}
else{
value = error.v;
@ -388,7 +388,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[n]) && isRealNum(tp[n])){
value = parseFloat(fp[n]) * parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp[n], sp, tp[n]);// parseFloat(fp[n]) * parseFloat(tp[n]);
}
else{
value = error.v;
@ -414,7 +414,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[m][n]) && isRealNum(tp)){
value = parseFloat(fp[m][n]) * parseFloat(tp);
value = luckysheet_calcADPMM(fp[m][n], sp, tp);// parseFloat(fp[m][n]) * parseFloat(tp);
}
else{
value = error.v;
@ -432,7 +432,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp[n]) && isRealNum(tp)){
value = parseFloat(fp[n]) * parseFloat(tp);
value = luckysheet_calcADPMM(fp[n], sp, tp);// parseFloat(fp[n]) * parseFloat(tp);
}
else{
value = error.v;
@ -458,7 +458,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp) && isRealNum(tp[m][n])){
value = parseFloat(fp) * parseFloat(tp[m][n]);
value = luckysheet_calcADPMM(fp, sp, tp[m][n]);// parseFloat(fp) * parseFloat(tp[m][n]);
}
else{
value = error.v;
@ -476,7 +476,7 @@ function luckysheet_compareWith() {
let value;
if(isRealNum(fp) && isRealNum(tp[n])){
value = parseFloat(fp) * parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp, sp, tp[n]);//parseFloat(fp) * parseFloat(tp[n]);
}
else{
value = error.v;
@ -494,7 +494,7 @@ function luckysheet_compareWith() {
let result;
if(isRealNum(fp) && isRealNum(tp)){
result = parseFloat(fp) * parseFloat(tp);
result = luckysheet_calcADPMM(fp, sp, tp);//parseFloat(fp) * parseFloat(tp);
}
else{
result = error.v;
@ -523,7 +523,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[m][n]) / parseFloat(tp[m][n]);
value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);// parseFloat(fp[m][n]) / parseFloat(tp[m][n]);
}
}
else{
@ -553,7 +553,7 @@ function luckysheet_compareWith() {
tp_inverse[p][n] = booleanToNum(tp_inverse[p][n]);
if(isRealNum(fp[m][p]) && isRealNum(tp_inverse[p][n])){
value += parseFloat(fp[m][p]) * parseFloat(tp_inverse[p][n]);
value += luckysheet_calcADPMM(fp[m][p], "*", tp_inverse[p][n]);// parseFloat(fp[m][p]) * parseFloat(tp_inverse[p][n]);
}
else{
value += error.v;
@ -590,7 +590,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[m][n]) / parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);// parseFloat(fp[m][n]) / parseFloat(tp[n]);
}
}
else{
@ -620,7 +620,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[m][0]) / parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);// parseFloat(fp[m][0]) / parseFloat(tp[n]);
}
}
else{
@ -653,7 +653,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[n]) / parseFloat(tp[m][n]);
value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);//parseFloat(fp[n]) / parseFloat(tp[m][n]);
}
}
else{
@ -683,7 +683,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[n]) / parseFloat(tp[m][0]);
value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);//parseFloat(fp[n]) / parseFloat(tp[m][0]);
}
}
else{
@ -716,7 +716,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[n]) / parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp[n], sp, tp[n]);//parseFloat(fp[n]) / parseFloat(tp[n]);
}
}
else{
@ -747,7 +747,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[m][n]) / parseFloat(tp);
value = luckysheet_calcADPMM(fp[m][n], sp, tp);//parseFloat(fp[m][n]) / parseFloat(tp);
}
}
else{
@ -770,7 +770,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp[n]) / parseFloat(tp);
value = luckysheet_calcADPMM(fp[n], sp, tp);//parseFloat(fp[n]) / parseFloat(tp);
}
}
else{
@ -801,7 +801,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp) / parseFloat(tp[m][n]);
value = luckysheet_calcADPMM(fp, sp, tp[m][n]);//parseFloat(fp) / parseFloat(tp[m][n]);
}
}
else{
@ -824,7 +824,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = parseFloat(fp) / parseFloat(tp[n]);
value = luckysheet_calcADPMM(fp, sp, tp[n]);//parseFloat(fp) / parseFloat(tp[n]);
}
}
else{
@ -847,7 +847,7 @@ function luckysheet_compareWith() {
result = error.d;
}
else{
result = parseFloat(fp) / parseFloat(tp);
result = luckysheet_calcADPMM(fp, sp, tp);//parseFloat(fp) / parseFloat(tp);
}
}
else{
@ -879,7 +879,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[m][n]));
value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);// eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[m][n]));
}
}
else{
@ -910,7 +910,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[n]));
value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);//eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[n]));
}
}
else{
@ -941,7 +941,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp[n]) + sp + parseFloat(tp[m][n]));
value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);//eval(parseFloat(fp[n]) + sp + parseFloat(tp[m][n]));
}
}
else{
@ -969,7 +969,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp[n]) + sp + "(" + parseFloat(tp[n]) + ")" );
value = luckysheet_calcADPMM(fp[n], sp, tp[n]);//eval(parseFloat(fp[n]) + sp + "(" + parseFloat(tp[n]) + ")" );
}
}
else{
@ -1000,7 +1000,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp[m][n]) + sp + parseFloat(tp));
value = luckysheet_calcADPMM(fp[m][n], sp, tp);//eval(parseFloat(fp[m][n]) + sp + parseFloat(tp));
}
}
else{
@ -1023,7 +1023,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp[n]) + sp + parseFloat(tp));
value = luckysheet_calcADPMM(fp[n], sp, tp);//eval(parseFloat(fp[n]) + sp + parseFloat(tp));
}
}
else{
@ -1054,7 +1054,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp) + sp + parseFloat(tp[m][n]));
value = luckysheet_calcADPMM(fp, sp, tp[m][n]);//eval(parseFloat(fp) + sp + parseFloat(tp[m][n]));
}
}
else{
@ -1077,7 +1077,7 @@ function luckysheet_compareWith() {
value = error.d;
}
else{
value = eval(parseFloat(fp) + sp + parseFloat(tp[n]));
value = luckysheet_calcADPMM(fp, sp, tp[n]);//eval(parseFloat(fp) + sp + parseFloat(tp[n]));
}
}
else{
@ -1100,7 +1100,7 @@ function luckysheet_compareWith() {
result = error.d;
}
else{
result = eval(parseFloat(fp) + sp + "(" + parseFloat(tp) + ")");
result = luckysheet_calcADPMM(fp, sp, tp);//eval(parseFloat(fp) + sp + "(" + parseFloat(tp) + ")");
}
}
else{
@ -1568,6 +1568,26 @@ function luckysheet_getarraydata() {
return arr;
}
function luckysheet_calcADPMM(fp, sp, tp){
let value;
if(sp=="+"){
value = numeral(fp).add(tp).value();
}
else if(sp=="-"){
value = numeral(fp).subtract(tp).value();
}
else if(sp=="%"){
value = eval(parseFloat(fp) + sp+ "(" + parseFloat(tp) + ")");
}
else if(sp=="/"){
value = numeral(fp).divide(tp).value();
}
else if(sp=="*"){
value = numeral(fp).multiply(tp).value();
}
return value;
}
function luckysheet_getcelldata(txt) {
if (window.luckysheet_getcelldata_cache == null) {
window.luckysheet_getcelldata_cache = {};
@ -1881,5 +1901,6 @@ export {
luckysheet_getValue,
luckysheet_indirect_check,
luckysheet_indirect_check_return,
luckysheet_offset_check
luckysheet_offset_check,
luckysheet_calcADPMM
}

12
src/function/functionImplementation.js

@ -80,7 +80,7 @@ const functionImplementation = {
continue;
}
sum += parseFloat(dataArr[i]);
sum = luckysheet_calcADPMM(sum, "+", dataArr[i]);// parseFloat(dataArr[i]);
}
}
@ -143,7 +143,7 @@ const functionImplementation = {
return formula.error.v;
}
sum += parseFloat(dataArr[i]);
sum = luckysheet_calcADPMM(sum, "+", dataArr[i]);// parseFloat(dataArr[i]);
count++;
}
@ -151,7 +151,7 @@ const functionImplementation = {
return formula.error.d;
}
return sum / count;
return luckysheet_calcADPMM(sum, "/", count);// sum / count;
}
catch (e) {
var err = e;
@ -1746,7 +1746,7 @@ const functionImplementation = {
continue;
}
sum += parseFloat(sumRangeData[i]);
sum = luckysheet_calcADPMM(sum, "+", sumRangeData[i]);// parseFloat(sumRangeData[i]);
}
}
}
@ -1760,7 +1760,7 @@ const functionImplementation = {
continue;
}
sum += parseFloat(v);
sum = luckysheet_calcADPMM(sum, "", v);// parseFloat(v);
}
}
}
@ -4613,7 +4613,7 @@ const functionImplementation = {
for(var i = 0; i < rangeData.length; i++){
if(results[i]){
sum += parseFloat(rangeData[i]);
sum = luckysheet_calcADPMM(sum, "+", rangeData[i]); //parseFloat(rangeData[i]);
}
}

3
src/global/formula.js

@ -21,7 +21,7 @@ import { jfrefreshgrid } from './refresh';
import { isInlineStringCell,convertSpanToShareString } from '../controllers/inlineString';
// import luckysheet_function from '../function/luckysheet_function';
// import functionlist from '../function/functionlist';
import { luckysheet_compareWith, luckysheet_getarraydata, luckysheet_getcelldata, luckysheet_parseData, luckysheet_getValue, luckysheet_indirect_check, luckysheet_indirect_check_return, luckysheet_offset_check } from '../function/func';
import { luckysheet_compareWith, luckysheet_getarraydata, luckysheet_getcelldata, luckysheet_parseData, luckysheet_getValue, luckysheet_indirect_check, luckysheet_indirect_check_return, luckysheet_offset_check,luckysheet_calcADPMM } from '../function/func';
import Store from '../store';
import locale from '../locale/locale';
@ -4653,6 +4653,7 @@ const luckysheetformula = {
window.luckysheet_indirect_check = luckysheet_indirect_check;
window.luckysheet_indirect_check_return = luckysheet_indirect_check_return;
window.luckysheet_offset_check = luckysheet_offset_check;
window.luckysheet_calcADPMM = luckysheet_calcADPMM;
}
_this.execFunctionGroupData = $.extend(true, [], data);

8
src/global/setdata.js

@ -92,7 +92,13 @@ function setcellvalue(r, c, d, v) {
}
else{
if(cell.v.toString().indexOf("e") > -1){
let len = cell.v.toString().split(".")[1].split("e")[0].length;
let len;
if(cell.v.toString().split(".").length==1){
len = 0;
}
else{
len = cell.v.toString().split(".")[1].split("e")[0].length;
}
if(len > 5){
len = 5;
}

Loading…
Cancel
Save