如何将浮点数转换为整数?

时间:2020-04-01 20:27:43

标签: ruby mongodb

我被困在下面的函数中,将Float转换为Integer-它从未出现在v.to_int (对不起,我是Ruby的新手,它是猴子编码)。 我要解决的问题是来自MongoDB的数据应该是Integer类型,但有时输入流中有Floats(见下文)。

我要实现的目标-当Integer期望在特定位置上时-强制转换并截断Integer无论那里出现了什么(通常是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

1 个答案:

答案 0 :(得分:5)

要同时匹配整数和浮点数,您需要将when条件更改为:

GHCi> align [1,2] [3,9,27]
[These 1 3,These 2 9,That 27]
GHCi> align [3,9,27] [1,2]
[These 3 1,These 9 2,This 27]

或者只是when Integer, Float ,因为when Float已经涵盖了整数情况。

观察:

else

或者,您可以使用数字类:

3.is_a? Integer #=> true
3.is_a? Float #=> false
3.4.is_a? Integer #=> false
3.4.is_a? Float #=> true

请注意,数字不仅包括整数和浮点数,还包括复数和有理数:

when Numeric

我认为在您的情况下应该可以,但只需指出。

顺便说一句,您可能要使用(1+0i).is_a? Numeric 而不是to_int

round
相关问题