Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby/大十进制-无法执行保存_Ruby On Rails_Ruby_Sql Server - Fatal编程技术网

Ruby on rails Ruby/大十进制-无法执行保存

Ruby on rails Ruby/大十进制-无法执行保存,ruby-on-rails,ruby,sql-server,Ruby On Rails,Ruby,Sql Server,我有一列需要容纳18位数值。它在我的rails文件中定义为 Schema.rb t.decimal "revenue", precision: 23, scale: 5 现在,当我在console中尝试以下操作时: obj = Model.last obj.revenue = 999999999999999999 ( 18 nines) obj.save is returning false (我已确认最大收入应小于10000000000000000(1后跟18个零) 模态参数的

我有一列需要容纳18位数值。它在我的rails文件中定义为

Schema.rb

 t.decimal  "revenue",    precision: 23, scale: 5
现在,当我在console中尝试以下操作时:

obj = Model.last
obj.revenue = 999999999999999999 ( 18 nines)
obj.save is returning false 
(我已确认最大收入应小于10000000000000000(1后跟18个零)

模态参数的验证:

validates :revenue , numericality: {:greater_than => WBConstants::MIN_REVENUE_LIMIT, :less_than => WBConstants::MAX_REVENUE_LIMIT}, allow_blank: true
错误消息表示该值应小于100…(1后跟18个零)

我无法拯救。 我使用的数据库是sqlserver
列数据类型为decentral(23,5)

这是Rails中的一个错误,并且已经存在一个错误

在修复程序合并之前,您可以一直这样做

是什么导致了这个错误? 使用
Kernel.float将Rails内部绑定到浮点。float

f = Kernel.Float(999_999_999_999_999_999)
#=> 1.0e+18

f < 1_000_000_000_000_000_000
#=> false

f == 1_000_000_000_000_000_000
#=> true

有关详细信息,请参阅。

到目前为止,您可以使用自定义验证来解决此问题。 请查看以下链接:


希望这对您有所帮助。

数据库中的列类型是什么?您可以显示您的验证定义吗?您可以添加下划线以增强可读性:
1_000_000_000_000_000_000
验证中的常量是如何定义的?这似乎是Rails中的一个错误。该值由
Kernel.Float
Kernel.Float定义的(999_999_999_999_999_999)
返回
1.0e+18
。是的,上面建议了相同的解决方案。
(999999999999999000..1000000000000001000).map { |i| i.to_f.to_i }.uniq
#=> [999999999999998976,
#    999999999999999104,
#    999999999999999232,
#    999999999999999360,
#    999999999999999488,
#    999999999999999616,
#    999999999999999744,
#    999999999999999872,
#   1000000000000000000,
#   1000000000000000128,
#   1000000000000000256,
#   1000000000000000384,
#   1000000000000000512,
#   1000000000000000640,
#   1000000000000000768,
#   1000000000000000896,
#   1000000000000001024]