当升级到ruby1.9时,我在比较BigDecimal的预期值与实际值时测试失败,这是除float的结果。expected:'0.495E0',9(18)got:'0.49500000000000005E0',18(27)googlingforthingslike"bigdecimalrubyprecision"and"bigdecimalchangesruby1.9"isn'tgettingmeanywhere.HowdidBigDecimal'sbehaviorchangeinruby1.9?update1>RUBY_VERSION=>"1.8.7">1.23.to_d=>#>
这应该很简单,但它正在爆炸。有什么想法吗?d=BigDecimal.new("2.0")YAML::load({:a=>d}.to_yaml)TypeError:BigDecimalcan'tbecoercedintoBigDecimalfrom/Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in`inspect'from/Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb
我目前有一个运行Ruby1.8.7和Rails2.3.2的RubyonRails项目我有一些从数据库中读取数据的单元测试,特别是两个连续项目的日期时间列,这两个项目应该相隔24小时。在一项测试中,我将项目2的日期时间设置为与项目1的日期时间相同。当我执行断言以确保两个值相等时,测试在rails2.3.2下工作正常。当我升级到rails2.3.11时,测试失败显示两次之间的差异将关闭并出现以下错误:expectedbutwas.这两个版本的rails中似乎存在浮点转换问题。如何解决float问题? 最佳答案 这也发生在我身上,我最终这
大家早上好我在float学方面遇到了一些问题,完全迷失在“.to_f”、“*100”和“.0”中!我希望有人能帮助我解决我的具体问题,并准确解释他们的解决方案为何有效,以便我下次理解这一点。我的程序需要做两件事:对一组小数求和,确定它们的和是否正好为1.0确定1.0与数字总和之间的差值-将变量的值设置为使总和等于1.0的精确差值。例如:[0.28,0.55,0.17]->总和应为1.0,但我一直得到1.xxxxxx。我正在以下列方式实现总和:sum=array.inject(0.0){|sum,x|sum+(x*100)}/100我需要此功能的原因是我正在读取一组来自excel的小数。
我想在Ruby中正确地将美分转换为美元。我将永远不必使用几分之一美分。是否可以在不使用BigDecimal的情况下正确执行此操作(没有浮点错误)?例如,美分兑美元"99"=>"0.99""324"=>"3.24"以下似乎有效,但它是否正确?(cents.to_i/100.0).to_s更新:我注意到如果cents="10287349283923497624861294712974892742837833",上面的行不起作用。 最佳答案 作为MichealKohlalreadyanswered:看看金钱gem。例子:require'm
我正在从csv导入数据,我需要将一些值转换为BigDecimal,如果无法解析则引发错误。根据测试,BigDecimal("invalidnumber")返回0的BigDecimal。这没问题,但有点乱,除了有效值为0...Float("invalidnumber")的行为不同并抛出异常...我目前的解决方案是:classStringdefto_bdbeginFloat(self)rescueraise"Unabletoparse:#{self}"endBigDecimal(self)endend我是否完全遗漏了什么? 最佳答案 在
我是否必须保存对模型集合中单个项目的修改,或者是否有一种方法可以在我保存模型时调用以保存它们。#save似乎没有这样做。例如:irb>rental=#...#=>#irb>rental.dvd#=>#,sale_price:#>irb>rental.dvd.copies+=1#=>21irb>rental.save#=>trueirb>rental.dvd#=>#,sale_price:#>irb>Dvd.find_by_title('TheWomenofSummer')#=>#,sale_price:#>在上面的例子中,租赁的DVD副本似乎没有更新数据库中的副本(注意不同的副本数)。
引用BigDecimal类的文档,n,m=a.precsprecreturnsnumberofsignificantdigits(n)andmaximumnumberofsignificantdigits(m)ofa.我对以下与BigDecimal相关的输出感到困惑。require'bigdecimal'BigDecimal.new('1').precs#=>[9,18]BigDecimal.new(1).precs#=>[9,27]我不明白为什么当传递String时,有效数字的最大数目比传递Fixnum时少。它还会导致任何精度问题吗? 最佳答案
运行我的RSpec测试后,我经常得到这样的输出:expected:50got:#我如何找出RSpec实际得到的数字?感谢您的帮助。 最佳答案 正如@jcm评论的那样,它是220。(=0.22*103)require'bigdecimal'BigDecimal.new(220)#=>#BigDecimal.new(220)==220#=>true 关于ruby-on-rails-如何读取RSpec中的BigDecimal格式?,我们在StackOverflow上找到一个类似的问题:
我有一个包含十进制数字的Ruby字符串。将其转换为小数(定点)的最佳方法是什么?“最佳”是指:可靠,提供多种输入选项写起来简单易于阅读干...大致按照这个顺序。 最佳答案 (经过一番挖掘,我自己找到了它)BigDecimal是标准的Ruby定点类型,它的构造函数接受一个String并为您处理解析:BigDecimal.new("123.45") 关于ruby-从Ruby中的字符串解析十进制值,我们在StackOverflow上找到一个类似的问题: https: