草庐IT

floating-point-conversion

全部标签

ruby-on-rails - Ruby 中 Float 到 Decimal 的不一致转换

首先,取一个特定的floatf:f=[64.4,73.60,77.90,87.40,95.40].sample#takeanyoneofthesespecialFloatsf.to_d.class==(1.to_d*f).class#=>true(BigDecimal)因此乘以BigDecimal将f转换为BigDecimal。因此,1.to_d*f(或f*1.to_d)可以看作是一种(很差,但仍然)转换f的形式到BigDecimal。然而,对于这些特定值,我们有:f.to_d==1.to_d*f#=>false(?!)这不是一个错误吗?我假设在乘以1.to_d时,Ruby应该在内部调

ruby - 如何将 64 位二进制字符串转换为 ruby​​ 中的双 float ?

我想知道如何在ruby​​中将64位二进制字符串转换为双float。我的字符串如下:binaryString="0011111111110000000000000000000000000000000000000000000000000000"使用在线转换器(http://www.binaryconvert.com/convert_double.html?)我知道该值应该是1.0。但是,我正在尝试使用ruby​​解包转换为double,但没有得到正确的结果。double_value=binaryString.unpack("G")给我double_value=1.398381959371

Ruby float to_r 计算。小数化为分数

有人可以澄清为什么ruby​​在使用to_r时返回这么大的数字吗例如:a=0.025a.to_r3602879701896397/144115188075855872.为什么不用1/40? 最佳答案 这听起来像是一个典型的float问题,但隐藏在其中。虽然0.025可能被精确表示,但函数to_r无疑会在内部执行各种必然不精确的浮点运算。结果3602879701896397/144115188075855872无疑会比你的提议1/40更接近a的中间转换版本。现在3602879701896397/144115188075855872非常

ruby - 如何将binary32转换为ruby中的float

我有一个用IEEE32编码的binary32。如何将0x0040EDC2转换为-118,625?我已经尝试了几种打包和解包的选项,但都没有成功。IEEE:http://en.wikipedia.org/wiki/Single-precision_floating-point_format手册 最佳答案 $irbirb(main):001:0>bin="\x00\x40\xED\xC2"=>"\000@\355\302"irb(main):002:0>bin.unpack'f'=>[-118.625]irb(main):003:0>b

ruby - 为什么文本 "2e8"在 Mac 上被 YAML 视为字符串,而在 Linux 上的 Ruby 中被视为 float ?

对于相同的ruby​​版本,相同的YAML解析器引擎Psych(但次要版本不同),但不同的操作系统(Mac与Linux),文本"2e8"被视为String在Mac上,但在Linux上为Float(200000000.0)。为什么?我该如何解决才能使它们表现出相同的行为?对于Mac:Darwin12.4.0Darwin内核版本12.4.0:root:xnu-2050.24.15~1/RELEASE_X86_64x86_64require"yaml"RUBY_VERSION#=>"1.9.3"YAML::ENGINE.yamler#=>"psych"Psych::VERSION#=>"1.

ruby - 如何从 Ruby 中的阶乘方法中排除 float ?

使用递归(Ruby)查找阶乘时,以下代码查找整数的阶乘,但在float的情况下失败。我该如何调整呢?我考虑过像在数学中那样使用域,但我还不知道该怎么做。deffactorialnumifnum 最佳答案 过滤float的最简单方法是使用使它们float的东西:)它们不能被1整除。deffactorialnumif(num%1!=0||num希望对您有所帮助。干杯 关于ruby-如何从Ruby中的阶乘方法中排除float?,我们在StackOverflow上找到一个类似的问题:

ruby - Fixnum (Integer) 和 Float 在 Ruby 中如何比较相等?

在Flanagan和Matz的TheRubyProgrammingLanguage中,我读到:TheNumericclassesperformsimpletypeconversionsintheir==operators,sothat(forexample)theFixnum1andtheFloat1.0compareasequal.鉴于甚至两个代表1.0的Float都可能由于四舍五入而无法通过相等性测试,如何保证Fixnum之间的相等性>和一个Float?难道不能保证它只在Decimal和Float之间吗?或者这本书不准确是因为这不是本章上下文中的重点?编辑,希望更加清晰:我刚刚读到

ruby : Convert String to Float

我需要添加3个字符串变量。a=“5.21”,b=“5.22”和c=“5.23”。当我尝试添加时,我得到一个字符串,我需要数值我试过以下方法a=a.to_f=>5.2b=b.to_f=>5.2c=c.to_f=>5.2sum=a+b+c=>15.6我如何获得输出15.66。请帮忙 最佳答案 尝试利用Ruby的内置Enumerable方法。试试这个:a="5.21"b="5.22"c="5.23"[a,b,c].map(&:to_f).inject(:+)#=>15.66 关于ruby:Co

ruby-on-rails - Ruby Sort ActiveRecord - float 像 float 一样存储为字符串

RubyonRails4-将ActiveRecord字符串列排序为float。我有一个带有版本列(字符串)的RecordModel表,用于存储版本。版本超过格式major.minorversion。问题是一个版本将从9.0跳到10.0,但是因为它存储为字符串,所以我如何像整数一样对它进行排序?RecordModel(id:integer,version:string,created_at:datetime,updated_at:datetime)create_table"record_models",force:truedo|t|t.string"version"t.datetime"

ruby - 为什么不能在 `singleton` `Fixnum` ,`Bignum` ,`Float` 类对象上定义 ,`Symbol` 方法,但 ` FalseClass` 和 `TrueClass` 可以有?

为什么不能在Fixnum,Bignum,Float,上定义singleton方法Symbol类对象,但是FalseClass和TrueClass可以有吗?C:\>ruby-vruby2.0.0p0(2013-02-24)[i386-mingw32]C:\>irb--simple-promptDLisdeprecated,pleaseuseFiddle11111111111.class#=>Bignumclass'1111.class#=>Fixnumclass'11.11.class#=>Floatclass':name.class#=>Symbolclass'