我有我的驗證的MODLE類似如下:如何驗證數值的小數位數?
validates_numericality_of :shoe_size, :message=>'Please input a number'
但這是不夠的,因爲用戶可以輸入一些值像預計不「42.22222222121212121212 ......」。所以,如何驗證輸入只有兩位小數像42.22
我有我的驗證的MODLE類似如下:如何驗證數值的小數位數?
validates_numericality_of :shoe_size, :message=>'Please input a number'
但這是不夠的,因爲用戶可以輸入一些值像預計不「42.22222222121212121212 ......」。所以,如何驗證輸入只有兩位小數像42.22
爲什麼你不收到輸入後按摩輸入?在我看來,你應該將它舍入到兩位小數,而不是讓用戶擔心。
Rails提供round_with_precision所以只需調用.round(2)在您的float上將其舍入爲2位小數。
sprintf Ruby類提供了指定要顯示的小數位數的能力。 在下面的例子中,我得到了曲目的平均評分,並確保平均值四捨五入到小數點後1位。
sprintf("%.1f",track.ratings.average('rating'))
你可以試試這個:
validates_format_of :shoe_size, :with => /^\d+\.*\d{0,2}$/
@warren回答,但取出*和放?因爲你可以做3 ..... 0但是?你可以有零個或一個。
:with => /^\d+\.?\d{0,2}$/
大廈關閉@ Bitterzoet的回答,但仍使其成爲驗證(通過the validate
method):
class Product < ApplicationRecord
# Whatever other validations you need:
validates :price, numericality: {greater_than_or_equal_to: 0}
# then a custom validation for precision
validate :price_is_valid_decimal_precision
private
def price_is_valid_decimal_precision
# Make sure that the rounded value is the same as the non-rounded
if price.to_f != price.to_f.round(2)
errors.add(:price, "The price of the product is invalid. There should only be two digits at most after the decimal point.")
end
end
end