후행 0.0을 자릅니다.
부품 번호가 포함된 Excel 열이 있습니다.여기 샘플이 있습니다.

보시다시피 다양한 데이터 유형이 있을 수 있습니다.Float,Int,그리고.String사용 중roo파일을 읽을 보석.문제는roo정수 셀을 다음과 같이 해석합니다.Float뒤에 0을 더하는 것입니다(30431 => 16431.0).저는 이 0을 다듬고 싶습니다.사용할 수 없습니다.to_i왜냐하면 그것은 그것들에 소수가 필요한 셀들의 모든 후행 숫자들을 잘라낼 것이고 (위의 예에서 첫 번째 행), 그리고 그것의 문자열 char 뒤에 있는 모든 것을 잘라낼 것이기 때문입니다.String행(위 예제의 마지막 행).
현재 셀의 마지막 두 문자를 확인하여 ".0"이면 트리밍하는 방법이 있습니다.
def trim(row)
if row[0].to_s[-2..-1] == ".0"
row[0] = row[0].to_s[0..-3]
end
end
이것은 효과가 있지만, 끔찍하고 진부한 느낌입니다.내 엑셀 파일 내용을 루비 데이터 구조로 가져오는 올바른 방법은 무엇입니까?
def trim num
i, f = num.to_i, num.to_f
i == f ? i : f
end
trim(2.5) # => 2.5
trim(23) # => 23
또는 문자열에서:
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
레일을 사용하는 사용자의 경우 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
자세한 내용은 설명서를 참조하십시오.
대부분의 경우 이를 통해 다음과 같은 요구 사항을 충족할 수 있습니다.some_value.gsub(/(\.)0+$/, '').
뒤에 오는 모든 0과 소수점 뒤에 오는 0만 잘라냅니다.그렇지 않으면 문자열을 그대로 둡니다.
또한 입력 값이 이미 문자열이라고 가정할 때 부동소수점이나 정수 변환이 필요하지 않으므로 성능이 매우 우수합니다.
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>
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
언급URL : https://stackoverflow.com/questions/18533026/trim-a-trailing-0
'programing' 카테고리의 다른 글
| 엑셀에서 워드로 붙여넣은 차트의 파일 크기 줄이기 (0) | 2023.06.13 |
|---|---|
| x86과 x64의 동일한 페이지 내에서 버퍼의 끝을 지나서 읽는 것이 안전합니까? (0) | 2023.06.13 |
| 인덱스 온 뷰(Oracle) (0) | 2023.06.13 |
| https://settings.crashlytics.com/spi/v2/platforms/android/apps/ 에서 설정을 검색하지 못했습니다. (0) | 2023.06.08 |
| 각도 형식 필드를 수동으로 유효하지 않게 설정하려면 어떻게 해야 합니까? (0) | 2023.06.08 |