ฉันมีเขตข้อมูลhrและminจำนวนเต็มทั้งสองในใบสมัครของฉัน สำหรับhrฟิลด์หากผู้ใช้ป้อน "1" ฉันต้องการให้ Rails pad อัตโนมัติเป็น "01" ก่อนที่จะบันทึกลงในฐานข้อมูล นอกจากนี้สำหรับminฟิลด์หากผู้ใช้ป้อน "0" ควรใส่เป็น "00"
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันมีเขตข้อมูลhrและminจำนวนเต็มทั้งสองในใบสมัครของฉัน สำหรับhrฟิลด์หากผู้ใช้ป้อน "1" ฉันต้องการให้ Rails pad อัตโนมัติเป็น "01" ก่อนที่จะบันทึกลงในฐานข้อมูล นอกจากนี้สำหรับminฟิลด์หากผู้ใช้ป้อน "0" ควรใส่เป็น "00"
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
มันจะเป็นการดีกว่าถ้าคุณเก็บมันไว้เป็นจำนวนเต็มและแสดงมันตามที่คุณอธิบายไว้ในขณะใช้งานจริง ทุกภาษามีวิธีการของตัวเองเพื่อศูนย์แผ่น - สำหรับ Ruby คุณสามารถใช้String # rjust เมธอดนี้วางสตริง (ชิดขวา) เพื่อให้กลายเป็นความยาวที่กำหนดโดยใช้อักขระ padding ที่กำหนด
str.rjust(integer, padstr=' ') → new_strหาก
integerมีค่ามากกว่าความยาวของstrผลตอบแทนใหม่Stringของความยาวintegerที่มีstrสิทธิธรรมและเบาะกับpadstr;strมิฉะนั้นผลตอบแทน
some_int = 5
some_int.to_s.rjust(2, '0') # => '05'
some_int.to_s.rjust(5, '0') # => '00005'
another_int = 150
another_int.to_s.rjust(2, '0') # => '150'
another_int.to_s.rjust(3, '0') # => '150'
another_int.to_s.rjust(5, '0') # => '00150'
คุณสามารถแปลงจำนวนเต็มเป็นสตริงชนิดนั้นด้วย:
result_string = '%02i' % your_integer
สิ่งนี้เป็นอิสระจากวิธีการบันทึกใน db
มันมีประโยชน์มากทีเดียว:
"%.2d" % integer
สตริงผลลัพธ์จะมีอักขระ 2 ตัวและถ้าตัวเลขน้อยกว่า 2 ตัวอักษร 0s จะปรากฏในสตริง
คุณไม่สามารถจัดเก็บ01เป็นจำนวนเต็ม มันจะถูกแปลงเป็น1
คุณสามารถเก็บเป็นสตริงหรือคุณสามารถแสดงเป็นสตริง "01"
ฉันชอบโอเปอเรเตอร์% แม้ว่าดูเหมือนว่าจะไม่ถูกใจ ...
2.0.0-p247 :001 > '%02i' % 1
=> "01"
2.0.0-p247 :002 > '%2i' % 1
=> " 1"
2.0.0-p247 :003 > '%-2i' % 1
=> "1 "
อีกวิธีหนึ่งในการบรรลุเป้าหมายนี้คือการวางจำนวนเต็ม ณ เวลาที่แสดงโดยใช้ sprintf:
f = sprintf '%04d', 49
# f = "0049"
ลองสิ่งนี้และคุณสามารถเปลี่ยนพวกมันให้ตรงกัน
def numeric92(num)
if num.present?
if num < 0 && num > -1
('-%05d' % num) + '.' + ('%.2f' % num).split('.').last
else
('%06d' % num) + '.' + ('%.2f' % num).split('.').last
end
else
'000000.00'
end
end
if num < 0 && num > -1คืออะไร?