2011-04-06 46 views
2

我有我的驗證的MODLE類似如下:如何驗證數值的小數位數?

validates_numericality_of :shoe_size, :message=>'Please input a number' 

但這是不夠的,因爲用戶可以輸入一些值像預計不「42.22222222121212121212 ......」。所以,如何驗證輸入只有兩位小數像42.22

回答

0

爲什麼你不收到輸入後按摩輸入?在我看來,你應該將它舍入到兩位小數,而不是讓用戶擔心。

Rails提供round_with_precision所以只需調用.round(2)在您的float上將其舍入爲2位小數。

0

sprintf Ruby類提供了指定要顯示的小數位數的能力。 在下面的例子中,我得到了曲目的平均評分,並確保平均值四捨五入到小數點後1位。

sprintf("%.1f",track.ratings.average('rating')) 
5

你可以試試這個:

validates_format_of :shoe_size, :with => /^\d+\.*\d{0,2}$/ 
3

@warren回答,但取出*和放?因爲你可以做3 ..... 0但是?你可以有零個或一個。

:with => /^\d+\.?\d{0,2}$/ 
0

大廈關閉@ 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