簡體   English   中英

對格式化數字的自定義數組 JS 求和

[英]Sum custom array of formatted numbers JS

我有一個自定義的格式化數字數組,如下所示:

[15.325,00  2.314,00  99.990,00  1.112.345,00]

我怎樣才能將它們相加到1.229.974,00 我是否必須將它們重新格式化為整數(通過某種方式),對它們求和並格式化結果? 這種格式看起來不像標准格式。

您可以刪除不需要的字符,對值求和並應用格式。

 const format = value => value .toString() .padStart(3, 0) .replace(/.{1,3}(?=(.{3})*..$)/g, (p, _, o, s) => p + (o + 5 === s.length ? ',' : '.')); var data = ['15.325,00', '2.314,00', '99.990,00', '1.112.345,00'], sum = format(data.reduce((s, v) => s + +v.replace(/\\D/g, ''), 0)); console.log(sum); console.log(format(0)); // to get a minimum string length

做了一個誠實的嘗試。 看起來很短,直到重新格式化答案。 任何建設性的批評表示贊賞!

 let a = ["15.325,00", "2.314,00", "99.990,00", "1.112.345,00"]; function untitled(originalArrayString) { //turn array into array of numbers let arrayNum = originalArrayString.map(function(item) { return asNumber = Number.parseFloat(item.replace(/\\./g, '') .replace(/,/, '.')); }) //sum up numbers let answerAsNumber = arrayNum.reduce(function (accumulator, number) { return accumulator + number; }); //give answer in format function answerFormatted(answerAsNumber) { let numberToString = String(answerAsNumber); let reverse = numberToString.split("").reverse().join(""); let addPeriod = ''; if (reverse.includes('.')) { let replaceDecimalWithComma = reverse.replace(/\\./, ','); addPeriod = replaceDecimalWithComma.replace(/(,)?\\d{3}\\B/g, '$&.'); } else { addPeriod = reverse.replace(/\\d{3}\\B/g, '$&.'); addPeriod = addPeriod.replace(/^/, '$&00,'); } return reverted = addPeriod.split("").reverse().join(""); } return answerFormatted(answerAsNumber); } console.log(untitled(a));

這可以工作,但如果整數,則不會添加“00”分數。

 function formattedToFloat(str, decimal=".", thousands=",") { return parseFloat(str.split(decimal).map(item=>item.split(thousands).join("")).join(decimal)); } function floatToFormatted(flt, decimal=".", thousands=",") { return flt.toString().split(decimal).map((cv,i)=>{ if(i) return cv; else { var cva=cv.split(""); var sep=cva.length%3; var ret=[]; do { var dig=cva.pop(); ret.unshift(dig); if(cva.length%3==sep && cva.length) ret.unshift(thousands); } while (cva.length); return ret.join(""); } }).join(decimal); } var arr=["15.325,00", "2.314,00", "99.990,00", "1.112.345,00"]; console.log(floatToFormatted(arr.reduce((acc, cv)=>acc+formattedToFloat(cv, ",", "."),0), ",", "."));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM