JRuby 1.6.x คุณปัดทศนิยมเป็นทศนิยมใน jruby ได้อย่างไร
number = 1.1164
number.round(2)
The above shows the following error
wrong number of arguments (1 for 0)
ฉันจะปัดเศษทศนิยมนี้เป็นทศนิยม 2 ตำแหน่งได้อย่างไร
JRuby 1.6.x คุณปัดทศนิยมเป็นทศนิยมใน jruby ได้อย่างไร
number = 1.1164
number.round(2)
The above shows the following error
wrong number of arguments (1 for 0)
ฉันจะปัดเศษทศนิยมนี้เป็นทศนิยม 2 ตำแหน่งได้อย่างไร
คำตอบ:
Float # round สามารถรับพารามิเตอร์ใน Ruby 1.9 ไม่ใช่ใน Ruby 1.8 ค่าเริ่มต้น JRuby 1.8 แต่มันก็เป็นความสามารถในการทำงานในโหมด 1.9
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
กำลังกลับมาเพียง 5.6
sprintf('%.2f', number)
เป็นวิธีการจัดรูปแบบตัวเลขที่ลึกลับ แต่ทรงพลังมาก ผลลัพธ์จะเป็นสตริงเสมอ แต่เนื่องจากคุณปัดเศษฉันถือว่าคุณทำเพื่อการนำเสนออยู่แล้ว sprintf
สามารถจัดรูปแบบจำนวนเท่าใดก็ได้ตามที่คุณต้องการและอีกมากมาย
เอกสาร sprintf ฉบับเต็ม: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
ยังเห็นได้บ่อยกว่าอย่างน้อยก็ในงานของฉัน
sprintf
(หรือformat
) มากกว่า%
รุ่น การให้เหตุผลบางอย่างที่กล่าวถึงที่นี่ส่วนใหญ่เกี่ยวกับความสามารถในการอ่าน ไม่ว่าเราทุกคนจะต้องปฏิบัติตามคำแนะนำสไตล์เพียงแค่ให้เหตุผลบางอย่าง :)
0.566666666666666
รอบถึง0.57
"%.2f"
ปัดเศษ5
ขึ้นแทนที่จะเป็นขึ้นมีวิธีใดที่จะแก้ไขได้ไหม
หลังจากได้รับคำติชมดูเหมือนว่าโซลูชันดั้งเดิมจะไม่ทำงาน นั่นเป็นเหตุผลที่ปรับปรุงคำตอบเป็นหนึ่งในข้อเสนอแนะ
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
คำตอบอื่น ๆ อาจใช้งานได้ถ้าคุณต้องการที่จะปัดเศษทศนิยม 2 ตำแหน่ง แต่ถ้าคุณต้องการมีตัวเลขทศนิยมที่มีทศนิยมสองตำแหน่งแรกโดยไม่ปัดเศษคำตอบเหล่านั้นจะไม่ช่วย
ดังนั้นเพื่อให้ได้ตัวเลขทศนิยมที่มีทศนิยมสองตำแหน่งแรกฉันใช้เทคนิคนี้ ไม่ทำงานในบางกรณี
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
ด้วย5.666666666666666666666666
ก็จะกลับแทนโค้งมน5.66
5.67
หวังว่ามันจะช่วยใครซักคน
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
หรือง่ายกว่าที่คุณสามารถใช้float_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
ป้อนข้อมูลหนึ่งรายการแรก1.11
และรายการที่สองแสดง1.11111111111111e+16
ลองสิ่งนี้:
module Util
module MyUtil
def self.redondear_up(suma,cantidad, decimales=0)
unless suma.present?
return nil
end
if suma>0
resultado= (suma.to_f/cantidad)
return resultado.round(decimales)
end
return nil
end
end
end
เพื่อตัดทศนิยมฉันใช้รหัสติดตาม:
<th><%#= sprintf("%0.01f",prom/total) %><!--1dec,aprox-->
<% if prom == 0 or total == 0 %>
N.E.
<% else %>
<%= Integer((prom/total).to_d*10)*0.1 %><!--1decimal,truncado-->
<% end %>
<%#= prom/total %>
</th>
หากคุณต้องการตัดให้เหลือ 2 ทศนิยมคุณควรใช้ Integr(a*100)*0.01