我正在开发REST API并返回JSON。其中一个字段称为submittingPercent,我需要将其作为一个数字,但必须精确到小数点后两位
如果submittingPercent为20,则需要返回20.00。
如果submittingPercent是20.238,那么我需要返回20.24。
但是submissionPercent应该是一个数字,而不是字符串。
如果使用toFixed
或toPrecision
,则得到的是字符串。
如果可能,我该如何实现?
最佳答案
var n = 20.238;
Math.round(n * 100) / 100
// => 20.24
或更笼统地说:
function roundWithPrecision(num, precision) {
var multiplier = Math.pow(10, precision);
return Math.round( num * multiplier ) / multiplier;
}
roundWithPrecision(20.238, 2)
// => 20.24
roundWithPrecision(20.238, 1)
// => 20.2
正如其他人指出的那样,
20
和20.00
完全相同,因此,如果您希望用户看到小数点后的两位数字(即使它们为零),则必须使用字符串格式化函数,例如toFixed
。对于JSON API,由使用者决定解码时如何存储值。即使您输出表示
{ val: 20.00 }
的JSON,使用者也将以其选择的宽度存储它。它可能以32位浮点数或64位浮点数结尾。它可能以字符串结尾。它可能最终出现在VARCHAR(6)
列的MySQL数据库中。您无法控制使用者如何处理您的数据,这是设计使然。与
{ val: 20.00 }
或{ val: 20 }
或{ val: 20.00000 }
相比,输出{ val: 2000e-2 }
没有优势。如果希望API使用者假定两位数的精度,则应将该信息放在API文档中。我鼓励这样做,因为它将帮助其他开发人员在实现API客户端时做出决策。