我正在试着写一个从整数中取出最低序号的函数。例如:
> 24689.lowest_order
=> 9到目前为止,我有:
class Integer
def lowest_order
Integer (self / 10.0 - self / 10) * 10
end
end和it works....sometimes:
irb(main):002:0> n = 235
=> 235
irb(main):007:0> n.class
=> Fixnum
irb(main):004:0> n/10.0
=> 23.5
irb(main):005:0> n/10
=> 23
irb(main):003:0> n.lowest_order
=> 5
irb(main):008:0> (n/10.0 - n/10)*10
=> 5.0而在其他情况下,它会失败(示例之间没有代码更改):
irb(main):010:0> n = 232
=> 232
irb(main):021:0> n.class
=> Fixnum
irb(main):009:0> n.lowest_order
=> 1
irb(main):011:0> n/10.0
=> 23.2
irb(main):012:0> n/10
=> 23
irb(main):013:0> n/10.0 - n/10
=> 0.199999999999999
irb(main):022:0> n = Integer 232
=> 232
irb(main):023:0> n/10.0 - n/10
=> 0.199999999999999这是怎么回事?我不希望仅仅为了获取数字的最小部分而通过字符串过滤整数。
谢谢!
发布于 2010-09-15 13:18:20
有没有什么原因你不能只做n % 10或n.modulo 10 (参见documentation)?
回答“为什么这个不起作用?”你问题的一部分,答案是floating point arithmetic doesn't always behave as you'd expect it to。
https://stackoverflow.com/questions/3714807
复制相似问题