加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby Float转换为分数

发布时间:2020-12-17 01:43:34 所属栏目:百科 来源:网络整理
导读:用户输入字符串’67 .99′.我需要最终将其转换为整数6799. 换句话说:通过整数数据类型将通过字符串输入的货币金额转换为美分. 我注意到这种情况发生了: ('67.99'.to_f * 100).to_i#= 6798 不期望的行为.我需要将它保存为6799,而不是6798. 问题是将此浮点数
用户输入字符串’67 .99′.我需要最终将其转换为整数6799.

换句话说:通过整数数据类型将通过字符串输入的货币金额转换为美分.

我注意到这种情况发生了:

('67.99'.to_f * 100).to_i
#=> 6798

不期望的行为.我需要将它保存为6799,而不是6798.

问题是将此浮点数乘以100:

'67.99'.to_f * 100
#=> 6798.999999999999

问题:如何正确地将作为字符串输入的小数转换为整数?

示例输入和输出:

'67'    #=> 6700
'67.'   #=> 6700
'67.9'  #=> 6790
'67.99' #=> 6799

IMO:这不是this question的重复,因为我知道浮动没有被破坏.

解决方法

使用 round

('67.99'.to_f * 100).round
#=> 6799

正如评论中所讨论的,有一种更好的方法可以处理这些字符串 – BigDecimal class:

(BigDecimal.new('67.99') * 100).round
#=> 6799

这与大数字有关:

input = '1000000000000001'

(input.to_f * 100).round
#=> 100000000000000096

(BigDecimal.new(input) * 100).round
#=> 100000000000000100

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读