16

部品番号を含む Excel 列があります。ここにサンプルがあります

ご覧のとおりFloatInt、 、 など、さまざまなデータ型が可能Stringです。私はrooファイルを読むためにgemを使用しています。問題は、roo整数セルを として解釈Floatし、末尾にゼロを追加することです (16431 => 16431.0)。この末尾のゼロを削除したい。to_i小数点を必要とするセルの末尾の数字 (上記の例の最初の行) をすべて削除し、行内の文字列 char の後のすべてString(上記の例の最後の行)を削除するため、使用できません。

現在、セルの最後の2文字をチェックし、それらが「.0」の場合はそれらをトリミングする方法があります

def trim(row)
    if row[0].to_s[-2..-1] == ".0"
        row[0] = row[0].to_s[0..-3]
    end
end

これは機能しますが、ひどくハックな感じがします。Excel ファイルの内容を Ruby データ構造に変換する適切な方法は何ですか?

4

4 に答える 4

34

Rails を使用している場合、ActionView にはこれを処理するための引数をnumber_with_precision取るメソッドがあります。strip_insignificant_zeros: true

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

詳細については、number_with_precisionドキュメントを参照してください。

于 2016-10-09T11:29:06.317 に答える
-1

数値は :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
于 2013-08-30T12:49:57.110 に答える