Tag: 浮点精度

奇怪的Heroku浮点精度错误(轨道上的ruby)

最初我模型上的一个坐标字段是使用整数,但当我尝试部署到Heroku时,我被提醒(通过崩溃)我需要它成为一个浮点(因为我的坐标中有小数点)。 所以我在我的本地机器上生成了change_column迁移,将change_column转换为浮动代替。 一切都很顺利。 我尝试再次部署到heroku,首先使用heroku pg:reset然后使用heroku db:setup 。 在db:setup期间,我收到以下错误: PGError: ERROR: precision for type float must be less than 54 bits : CREATE TABLE “landmarks” (“id” serial primary key, “name” character varying(255), “xcoord” float(255), “ycoord” float(255), “created_at” timestamp, “updated_at” timestamp) 所以我生成了另一个change_column迁移,这次使用:precision选项(设置为:precision => 50 ,小于54)。 我再次完成整个部署过程,它给了我同样的错误。 难道我做错了什么? 我在Heroku之前部署了另一个应用程序,之前使用了float而没有任何修改…… 我在我的本地机器上使用SQLite,我认为Heroku使用Postgres? 提前致谢! [编辑:我还应该提一下输出SQL后错误显示我改变了:precision我的coords的:precision值仍然说’浮动(255)’…不知道为什么]

Ruby Float#round方法表现不正确圆(2)

我了解到建议使用BigDecimal而不是Float ,但这个要么是bug,要么突出了Float的深奥本质。 似乎Float#round(2)有“1.015”,“1.025”和“1.035”的问题。 1.015.round(2) => 1.01 # => WRONG .. should be 1.02 1.025.round(2) => 1.02 # => WRONG .. should be 1.03 1.035.round(2) => 1.03 # => WRONG .. should be 1.04 1.045.round(2) => 1.05 # => CORRECT 1.016.round(2) => 1.02 # => CORRECT round(3)工作正常。 1.0015.round(3) => 1.002 # => CORRECT 1.235.round(2) => 1.24 […]

为什么我的BigDecimal对象初始化时出现意外的舍入错误?

在Ruby 2.2.0中,为什么: BigDecimal.new(34.13985572755337, 9) 等于34.0但是 BigDecimal.new(34.13985572755338, 9) 等于34.1398557 ? 请注意,我在64位计算机上运行它。