如何在JSON对象中保留带0的小数位?
解决JSON解析后小数位0丢失的问题
问题根源
JSON的数字类型不区分整数和带末尾0的小数,解析后10000.00会被转为整数10000,导致小数位的0丢失。以下是几种可行的解决办法:
- 方案一:存储时将金额字段设为字符串类型
直接把需要保留小数位的字段(如salary、incentive)以字符串形式存储,解析后直接使用即可,计算时再转为数字类型:
let sampleObject = { "firstname": "Sundar", "lastname": "J", "salary": "10000.00", "incentive": "6500.50", "age": 25 } // 解析后直接取字符串显示 console.log(sampleObject.salary); // 输出 "10000.00" // 计算时转数字 const total = Number(sampleObject.salary) + Number(sampleObject.incentive);
- 方案二:解析后格式化数字为固定小数位
如果无法修改原始JSON结构,在解析完成后,用toFixed()方法将数字格式化为保留两位小数的字符串:
const jsonStr = '{"firstname":"Sundar","lastname":"J","salary":10000.00,"incentive":6500.50,"age":25}'; const parsedObj = JSON.parse(jsonStr); // 格式化薪资和激励金 const formattedSalary = parsedObj.salary.toFixed(2); // "10000.00" const formattedIncentive = parsedObj.incentive.toFixed(2); // "6500.50"
注意:toFixed()会对数字进行四舍五入,若需严格保留原始小数位,可结合Math.floor()或Math.round()做精度处理。
- 方案三:自定义JSON解析器
通过JSON.parse()的第二个参数(reviver函数),在解析阶段自动处理指定字段,保留小数位格式:
const jsonStr = '{"firstname":"Sundar","lastname":"J","salary":10000.00,"incentive":6500.50,"age":25}'; const parsedObj = JSON.parse(jsonStr, (key, value) => { // 针对薪资和激励金字段做格式化 if (['salary', 'incentive'].includes(key)) { return value.toFixed(2); } return value; }); console.log(parsedObj.salary); // 输出 "10000.00"
内容的提问来源于stack exchange,提问作者Sundaramoorthy J
相关产品推荐
相关产品推荐

