var a = [
{ name: "张三", a: 12, b: 0, c: 12.333,d:12.556 },
{ name: "李四", a: "2", b: 2.3, c: 14.33,d:12.444 },
];
把上面数据,如果是数字,不管什么类型的,保留两位小数,不是数字原封不动,改成下面这种样子,可以控制四舍五入,
如果不想四舍五入,就转成这样:
var c = [
{ name: "张三", a: 12.00, b: 0.00, c: 12.33,d:12.55 },
{ name: "李四", a: 2.00, b: 2.30, c: 14.33 ,d:12.44},
];
如果想四舍五入,就转成这样:
var c = [
{ name: "张三", a: 12.00, b: 0.00, c: 12.33,d:12.56 },
{ name: "李四", a: 2.00, b: 2.30, c: 14.33 ,d:12.44},
];
这道题不错
希望对您有所帮助,望采纳
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script>
var arr = [
{ name: "张三", a: 12, b: 0, c: 12.333,d:12.556 },
{ name: "李四", a: "2", b: 2.3, c: 14.33,d:12.444 },
];
function test(arr, iftrunc) {
var re = /^"?[0-9]+.?[0-9]*"?/;
for (let i = 0; i < arr.length; i++) {
var a = arr[i].a;
if (re.test(a)) {
//如果是由数字组成的字符串
var an = Number(a)
if (iftrunc) {
//如果四舍五入
console.log(an.toFixed(2))
} else {
console.log((Math.floor(an*100)/100).toFixed(2))
}
}
var b = arr[i].b;
if (re.test(b)) {
var an = Number(b)
//如果是由数字组成的字符串
if (iftrunc) {
//如果四舍五入
console.log(an.toFixed(2))
} else {
console.log((Math.floor(an*100)/100).toFixed(2))
}
}
var c = arr[i].c;
if (re.test(c)) {
var an = Number(c)
//如果是由数字组成的字符串
if (iftrunc) {
//如果四舍五入
console.log(an.toFixed(2))
} else {
console.log((Math.floor(an*100)/100).toFixed(2))
}
}
var d = arr[i].d;
if (re.test(d)) {
var an = Number(d)
//如果是由数字组成的字符串
if (iftrunc) {
//如果四舍五入
console.log(an.toFixed(2))
} else {
console.log((Math.floor(an*100)/100).toFixed(2))
}
}
}
}
test(arr, true);
test(arr, false);
</script>
</html>
测试结果
看一下这个方法适合你的业务吗?
var a = [
{ name: "张三", a: 12, b: 0, c: 12.333, d: 12.556 },
{ name: "李四", a: "2", b: 2.3, c: 14.33, d: 12.444 },
];
var c = [
{ name: "张三", a: 12.00, b: 0.00, c: 12.33, d: 12.55 },
{ name: "李四", a: 2.00, b: 2.30, c: 14.33, d: 12.44 },
];
/**
* @param { data } Array 需要格式化的数据
* @param { format } Number 需要保留几位小数
*/
const resetData = (data, format = 3) => {
if (!Array.isArray(data)) throw new Error("Data type can only be an Array");
return data.map(item => {
for (let t in item) {
console.log(item[t],t);
if (typeof item[t] !== 'number' && t !== 'name') {
item[t] = Number(item[t]).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
}
if (typeof item[t] === 'number') {
item[t] = item[t].toFixed(format).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
}
}
return item
})
}
const d = resetData(a)
console.log(d);
不能完全达到你的效果,如果你要保留2位小数就一定不能是数字了,因为12.00在js展示的是12,所以结果只能是字符串
var a = [
{name: "张三", a: 12, b: 0, c: 12.333, d: 12.556},
{name: "李四", a: "2", b: 2.3, c: 14.33, d: 12.444},
];
function changeData(a, type) {
const numberFix = param => {
let result
if (type == "round") {
result = Math.round(param * 100) / 100;
} else {
result = Number(param.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]);
}
return result.toFixed(2)
}
return a.map(item =>
Object.keys(item).reduce((total, index) => {
let itemElement = item[index];
if (typeof (itemElement) == 'number') {
itemElement = numberFix(itemElement)
} else if (typeof (itemElement) == 'string' && /^-?\d+(?:\.\d*)?$/.test(itemElement)) {
itemElement = numberFix(Number(itemElement))
}
total[index] = itemElement;
return total
}, {}))
}
console.log(changeData(a, 'noRound'))
console.log(changeData(a, 'round'))
var a = [
{name: "张三", a: 12, b: 0, c: 12.333, d: 12.556},
{name: "李四", a: 2, b: 2.3, c: 14.33, d: 12.444},
];
this.customSub(a, true);
this.customSub(a, false);
customSub(a, roundFlag) {
if (roundFlag) {
var ae = [];
for (const argument of a) {
let b = {}
for (const argumentKey in argument) {
let r = argument[argumentKey];
if (typeof (r) === 'number') {
r = r.toFixed(2);
r = Number(r);
if ((r + '').indexOf('.') === -1) {
r = r + '.00';
}
}
b[argumentKey] = r;
}
ae.push(b);
}
console.log('四舍五入结果=', JSON.stringify(ae))
} else {
var ae = [];
for (const argument of a) {
let b = {}
for (const argumentKey in argument) {
let r = argument[argumentKey];
if (typeof (r) === 'number') {
const rs = r + '';
const index = rs.indexOf('.') + 3;
const r1 = rs.substring(0, index);
const r2 = Number(r1).toFixed(2);
r = Number(r2);
if ((r + '').indexOf('.') === -1) {
r = r + '.00';
}
}
b[argumentKey] = r;
}
ae.push(b);
}
console.log('保留两位小数结果=', JSON.stringify(ae))
}
}