javascript编号精度而不转换为String

时间:2014-02-11 19:49:53

标签: javascript decimal rounding

我正在开发REST API并返回JSON。其中一个字段叫做submissionPercent,我需要它是一个数字,但正好有2个小数位

  • 如果submissionPercent为20,我需要返回20.00。
  • 如果submissionPercent是20.238,我需要返回20.24。

但submissionPercent应该是一个数字一个字符串。 如果我使用toFixedtoPrecision,那么我得到的就是字符串。

如果可能,我该如何实现?

1 个答案:

答案 0 :(得分:3)

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

正如其他人所指出的那样,2020.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客户端时做出决定。