Trim a trailing .0

前端 未结 4 1080
我在风中等你
我在风中等你 2021-02-19 01:02

I have an Excel column containing part numbers. Here is a sample

\"\"

As you can see, it can be many differ

相关标签:
4条回答
  • 2021-02-19 01:49
    def trim num
      i, f = num.to_i, num.to_f
      i == f ? i : f
    end
    
    trim(2.5) # => 2.5
    trim(23) # => 23
    

    or, from string:

    def convert x
      Float(x)
      i, f = x.to_i, x.to_f
      i == f ? i : f
    rescue ArgumentError
      x
    end
    
    convert("fjf") # => "fjf"
    convert("2.5") # => 2.5
    convert("23") # => 23
    convert("2.0") # => 2
    convert("1.00") # => 1
    convert("1.10") # => 1.1
    
    0 讨论(0)
  • 2021-02-19 01:52

    This should cover your needs in most cases: some_value.gsub(/(\.)0+$/, '').

    It trims all trailing zeroes and a decimal point followed only by zeroes. Otherwise, it leaves the string alone.

    It's also very performant, as it is entirely string-based, requiring no floating point or integer conversions, assuming your input value is already a string:

    Loading development environment (Rails 3.2.19)
    irb(main):001:0> '123.0'.gsub(/(\.)0+$/, '')
    => "123"
    irb(main):002:0> '123.000'.gsub(/(\.)0+$/, '')
    => "123"
    irb(main):003:0> '123.560'.gsub(/(\.)0+$/, '')
    => "123.560"
    irb(main):004:0> '123.'.gsub(/(\.)0+$/, '')
    => "123."
    irb(main):005:0> '123'.gsub(/(\.)0+$/, '')
    => "123"
    irb(main):006:0> '100'.gsub(/(\.)0+$/, '')
    => "100"
    irb(main):007:0> '127.0.0.1'.gsub(/(\.)0+$/, '')
    => "127.0.0.1"
    irb(main):008:0> '123xzy45'.gsub(/(\.)0+$/, '')
    => "123xzy45"
    irb(main):009:0> '123xzy45.0'.gsub(/(\.)0+$/, '')
    => "123xzy45"
    irb(main):010:0> 'Bobby McGee'.gsub(/(\.)0+$/, '')
    => "Bobby McGee"
    irb(main):011:0>
    
    0 讨论(0)
  • 2021-02-19 01:57

    Numeric values are returned as type :float

    def convert_cell(cell)
      if cell.is_a?(Float)
        i = cell.to_i
        cell == i.to_f ? i : cell
      else
        cell
      end
    end
    
    convert_cell("foobar") # => "foobar"
    convert_cell(123) # => 123
    convert_cell(123.4) # => 123.4
    
    0 讨论(0)
  • 2021-02-19 02:03

    For those using Rails, ActionView has the number_with_precision method that takes a strip_insignificant_zeros: true argument to handle this.

    number_with_precision(13.00, precision: 2,  strip_insignificant_zeros: true)
    # => 13
    number_with_precision(13.25, precision: 2,  strip_insignificant_zeros: true)
    # => 13.25
    

    See the number_with_precision documentation for more information.

    0 讨论(0)
提交回复
热议问题