【问题标题】:Float in Ruby on Rails Json在 Ruby on Rails Json 中浮动
【发布时间】:2016-03-11 07:53:39
【问题描述】:

我遇到了一个大问题:我有一个返回 JSON 的 API 方法。

其中一个字段具有浮动属性,我需要它是5.0。但是当我将它转换为 JSON 时,它变成了5

即使我做了这个render :json => 5.to_f,它仍然会返回整数。 我需要做什么才能在 JSON 响应中使用 5.0? 非常感谢

【问题讨论】:

  • render :json => 5.to_f.to_s, 5.to_json => "5" 5.to_f.to_json => "5.0" ?
  • 不,我需要浮点类型,而不是字符串
  • 将小数从语言 A 传递到语言 B 的唯一“安全”方法是使用字符串。
  • 在浏览器控制台试一下,{ "something": 98.79999999999999 }通过Javascript转换成{something: 98.79999999999998}

标签: ruby-on-rails ruby json api floating-point


【解决方案1】:

所有数字都是 Javascript 中的浮点数。数字是“双精度 64 位格式 IEEE 754 值”。

ECMAScript 2015 Language Specification

意思是,5.05 在 JS 中是一样的。没有区分 int、float 或 double。 由于 JSON(代表 JavaScript Object Notation)通常以 JS 对象的形式结束,5 代表一个浮点数。由于 JSON 格式主要用于数据传输/通信目的,因此省略小数部分的决定必须是在传递的字符串中保存几个字节。

在@z.shan 的回答中,5.0 作为字符串"5.0" 传递。 根据您的需要,我建议将 5 保留为 JSON 有效负载中的数字

【讨论】:

    【解决方案2】:

    所有数字都是 Javascript 中的浮点数。数字是“双精度 64 位格式 IEEE 754 值”。 如果你想这样做,那么你应该这样做 当我们渲染 json 时,没有浮点 >0 这就是为什么它显示为整数的原因,您可以将其转换为字符串值来执行此操作

     render json: 5.to_f.to_s
    

    仅当整数值在对象字段中时才会显示为浮点数

    【讨论】:

      【解决方案3】:

      或者你可以使用这样的转换:

      integer = 5
      render json: ('%.2f'%integer)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 2011-08-28
        • 1970-01-01
        相关资源
        最近更新 更多