มีวิธีการใด ๆ ที่เป็นระเบียบในการแปลง "1,112" เป็นจำนวนเต็ม 1112 แทนที่จะเป็น 1 หรือไม่
ฉันมีหนึ่งอัน แต่ไม่เรียบร้อย:
"1,112".split(',').join.to_i #=> 1112
มีวิธีการใด ๆ ที่เป็นระเบียบในการแปลง "1,112" เป็นจำนวนเต็ม 1112 แทนที่จะเป็น 1 หรือไม่
ฉันมีหนึ่งอัน แต่ไม่เรียบร้อย:
"1,112".split(',').join.to_i #=> 1112
คำตอบ:
แล้วเรื่องนี้ล่ะ?
"1,112".delete(',').to_i
นอกจากนี้คุณอาจต้องการตรวจสอบให้แน่ใจว่ารหัสของคุณแปลถูกต้องหรือตรวจสอบให้แน่ใจว่าผู้ใช้คุ้นเคยกับสัญกรณ์ "สากล" ตัวอย่างเช่น "1,112" หมายถึงตัวเลขที่แตกต่างกันในประเทศต่างๆ ในเยอรมนีหมายถึงตัวเลขมากกว่าหนึ่งเล็กน้อยแทนที่จะเป็นหนึ่งพันและบางอย่าง
สอดคล้องบทความวิกิพีเดียที่http://en.wikipedia.org/wiki/Decimal_mark ดูเหมือนว่าจะเขียนได้ไม่ดีในเวลานี้ ตัวอย่างเช่นในฐานะคนจีนฉันไม่แน่ใจว่าคำอธิบายเกี่ยวกับตัวคั่นหลักพันในจีนมาจากไหน
สะดวกขึ้นบ้าง
"1,1200.00".gsub(/[^0-9]/,'')
ทำให้ "1 200200" ทำงานได้อย่างถูกต้องเช่นกัน
'1,1200.00'.gsub(/[^0-9\.]/,'').to_f
ดียิ่งขึ้นคือ
"1,1200.00"
เป็น"1120000"
? คุณไม่เพียงต้องการแทนที่,
(หรือขึ้นอยู่กับสถานที่.
)? นอกจากนี้สิ่งนี้ไม่ได้แปลงเป็นจำนวนเต็มหรือทศนิยมเป็นเพียงสตริงที่ไม่มีตัวคั่น
ต่อไปนี้เป็นอีกวิธีหนึ่งที่ใช้ได้ผลแม้ว่าจะเหมือนกับวิธีอื่น ๆ ก็ตาม
a = 1,112
b = a.scan(/\d+/).join().to_i => 1112
ฉันจะใช้String#tr
:
"1,112".tr(',','').to_i # => 1112
หากมีคนต้องการย่อยมากกว่าจุลภาคฉันเป็นแฟนของ:
"1,200".chars.grep(/\d/).join.to_i
ไม่รู้เกี่ยวกับประสิทธิภาพ แต่มีความยืดหยุ่นมากกว่า a gsub
กล่าวคือ:
"1-200".chars.grep(/\d/).join.to_i
String count = count.replace(",", "");