我正在开发 REST API 并返回 JSON。其中一个字段称为submissionPercent,我需要它是一个数字,但精确到小数点后两位
- 如果submissionPercent是20,我需要返回20.00。
- 如果submissionPercent是20.238,我需要返回20.24。
但submissionPercent应该是一个数字not一个字符串。
如果我使用toFixed
or 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
and 20.00
完全相同,因此如果您希望用户看到小数点后的两位数字,即使它们为零,您也必须使用字符串格式化函数,例如toFixed
.
对于 JSON API,由消费者决定如何在解码后存储该值。即使你要输出 JSON 说{ val: 20.00 }
消费者将以其选择的任何宽度来存储它。它最终可能是 32 位浮点数或 64 位浮点数。它可能最终会出现在字符串中。它可能最终存储在 MySQL 数据库中VARCHAR(6)
柱子。您无法控制消费者如何处理您的数据,这是设计使然。
输出没有什么优势{ val: 20.00 }
over { val: 20 }
or { val: 20.00000 }
or { val: 2000e-2 }
。如果您希望 API 使用者assume两位数的精度,您应该将该信息放入 API 文档中。我鼓励这样做,因为它将帮助其他开发人员在实现 API 客户端时做出决策。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)