gpt4 book ai didi

ruby - 如何将 float 转换为整数?

转载 作者:行者123 更新时间:2023-12-02 02:56:38 27 4
gpt4 key购买 nike

我一直坚持在下面的函数中将 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com