作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直坚持在下面的函数中将 Float 转换为 Integer - 它永远不会出现 v.to_int
(抱歉,我是 Ruby 新手,它是猴子编码)。我试图解决的问题是来自 MongoDB 的数据应该是整数类型,但有时输入流中有 float (见下文)。
我想要实现的目标 - 当在特定位置上期望整数时 - 将出现的任何内容强制转换并截断为整数(通常为 float )。
def transform_primitive(v, type=nil)
case v
when BSON::ObjectId, Symbol
v.to_s
when BSON::Binary
if type.downcase == 'uuid'
v.data.to_s.unpack("H*").first
else
Sequel::SQL::Blob.new(v.data.to_s)
end
when Mongo::DBRef
v.id.to_s
when Integer
v.to_int
else
v
end
end
输入如下所示,因此最后一个值150.0
预计为150
[ "EUR", 20]
[ "EUR", 30]
[ "EUR", 450]
[ "EUR", 22]
[ "EUR", 150.0]
使用Ruby 2.7 MongoDB 3.4源库(MoSQL)不是我的,仓库是here
最佳答案
要匹配整数和 float ,您需要将 when 条件更改为:
when Integer, Float
或者只是当Float
时,因为整数情况已被else
覆盖。
观察:
3.is_a? Integer #=> true
3.is_a? Float #=> false
3.4.is_a? Integer #=> false
3.4.is_a? Float #=> true
或者,您可以使用 Numeric 类:
when Numeric
请注意,数值不仅包括整数和 float ,还包括复数和有理数:
(1+0i).is_a? Numeric
我认为这对于你的情况应该没问题,但只是指出来。
顺便说一句,您可能想使用 round
而不是 to_int
:
3.4.to_i #=> 3
3.6.to_i #=> 3
3.4.round #=> 3
3.6.round #=> 4
关于ruby - 如何将 float 转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60979729/
我是一名优秀的程序员,十分优秀!