【问题标题】:Force float value when using JSON.stringify使用 JSON.stringify 时强制浮点值
【发布时间】:2017-05-14 22:34:06
【问题描述】:

我想在 JSON.stringify() 之后强制 Number 成为 Float。不幸的是 JSON.stringify() 删除了 1 .0.

例子:

JSON.stringify(1.0) // "1"

想要的结果:

JSON.stringify(1.0) // "1.0"

我使用的 API 需要 JSON 格式的对象,但它只能理解十进制值。所以我想问是否可以使用 JSON.stringify 生成带有十进制值的字符串而不使用 Regex-.replace-magic

【问题讨论】:

  • 我猜你希望它仍然为JSON.stringify(1) 输出“1”? JavaScript 中没有“浮点数”之类的东西,只有 Numberstringify 有一个带函数的重载。使用它来确定输出什么。
  • @MikeMcCaughan 没有 JSON.stringify(1) 也应该输出“1.0”。是的,我见过这个重载函数。问题是;当我使用JSON.stringify({Test:1}, function(key, value){ if(key == 'Test') { return value.toFixed(1) } return value; }); // "{"Test":"1.0"}" 时。我不想在 "Test":**"** 1.0 "* 后面加引号

标签: javascript typescript


【解决方案1】:

对您的问题的直接且相当简短的回答是,您无法使用 JSON.stringify 自定义数值的序列化。见JSON.stringify() on MDN

如果您的整数确实需要小数,则必须使用您在问题中提到的“regex-magic”,或者找到一个允许您执行此类技巧的库。如果您不处理过于复杂或多种不同类型的对象,您可以手动将它们字符串化。

作为旁注,对于需要提供自定义格式 JSON 的 API,这听起来非常非常可疑。如果有任何其他使用方式,我会三重检查。

【讨论】:

  • 感谢您的回答。好吧,我会想办法的。不幸的是,这会影响我的代码的清洁度:(这是真的,我必须使用双精度值,我对它进行了三次检查。我没有直接使用 API,而是使用等效的东西。我想创建一个生成“我的世界”的库命令”,而这些命令无法被 Minecraft 很好地解析。如果您想了解更多有关此问题的信息,请私信我,否则,祝您有美好的一天:)
【解决方案2】:

使用 toFixed 代替 stringify。示例:

var num = 1;
var numStr = num.toFixed(1); //result is "1.0"

更多关于toFixed - http://www.w3schools.com/jsref/jsref_tofixed.asp.

要清楚我们正在谈论转换数字到字符串而不是数字到浮动(javascript中不存在这种类型),可以从问题描述中理解。 toFixed 将始终返回具有指定小数位数的字符串。

【讨论】:

  • 我建议使用 MDN 作为参考 (.toFixed())。
  • 将导致JSON.stringify(1.toFixed(1)) // '"1.0"'。不是我要找的。它不能有引号
  • @LivioBrunner 方式 你又要字符串化字符串了吗? toFixed 给出字符串,因此不需要再次在 stringify 中使用它。
  • @MaciejSikora 不幸的是我必须使用 JSON.stringify() :/
  • 问题是;我正在使用一个需要 JSON 格式对象的 API,但它只理解 decmiaml 值。所以我想问是否可以使用 JSON.stringify 生成带有十进制值的字符串而不使用 Regex-.replace-magic
猜你喜欢
  • 2015-10-05
  • 2018-01-23
  • 2021-06-01
  • 2021-05-07
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多