From: Robert Klemme Date: 2012-06-27T06:00:45+09:00 Subject: Re: Match part of the calculated value On Tue, Jun 26, 2012 at 10:47 PM, ideal one wrote: > Hi, >   Actually if you see my gross1 and gross2 values, the differences are > only at decimal level. > the first 3 numbers are in most cases matching. > So maybe i should go for 3 number/character match depending whether i am > retrieving it as a number or a string. I would not do any string comparison. The usual way is to define either a max difference or a max factor between two values. irb(main):001:0> gross1 = 567.45 * 10 => 5674.5 irb(main):002:0> gross2 = 567.88 * 10 => 5678.8 irb(main):003:0> (gross2 - gross1).abs => 4.300000000000182 irb(main):004:0> (gross2 - gross1).abs < 5 => true irb(main):005:0> ([gross1, gross2].max / [gross1, gross2].min) => 1.000757776015508 irb(main):006:0> ([gross1, gross2].max / [gross1, gross2].min) < 1.1 => true Since we're talking about currency values: note also there is BigDecimal for higher precision: irb(main):007:0> require 'bigdecimal' => true irb(main):008:0> gross1 = BigDecimal('567.45')*10 => # irb(main):009:0> gross2 = BigDecimal('567.88')*10 => # irb(main):010:0> (gross2 - gross1).abs => # irb(main):011:0> (gross2 - gross1).abs.to_s => "0.43E1" irb(main):012:0> (gross2 - gross1).abs < 5 => true irb(main):013:0> ([gross1, gross2].max / [gross1, gross2].min) => # irb(main):014:0> ([gross1, gross2].max / [gross1, gross2].min).to_s => "0.1000757776015507974270860869E1" irb(main):015:0> ([gross1, gross2].max / [gross1, gross2].min) < 1.1 => true Cheers robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/