Как проверить количество десятичных чисел для числового значения? - PullRequest
4 голосов
/ 06 апреля 2011

У меня есть проверка в модуле следующим образом:

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

Но этого недостаточно, потому что пользователь может ввести какое-то значение, например "42.22222222121212121212 ...", которое не ожидается.Итак, как проверить правильность ввода, чтобы иметь только два знака после запятой как 42.22

Ответы [ 5 ]

6 голосов
/ 06 апреля 2011

Вы можете попробовать это:

validates_format_of :shoe_size, :with => /^\d+\.*\d{0,2}$/
3 голосов
/ 12 апреля 2012

@ Уоррен ответ, но достаньте * и вставьте? потому что вы могли бы сделать 3 ..... 0, но с? Вы можете иметь ноль или единицу.

    :with => /^\d+\.?\d{0,2}$/
1 голос
/ 10 августа 2016

Построение ответа @ Bitterzoet, но все же проверка его правильности (с помощью validate метода ):

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
0 голосов
/ 06 апреля 2011

Класс sprintf Ruby предоставляет возможность указать количество десятичных разрядов для отображения. Например.В приведенном ниже примере я получаю средние оценки трека и проверяю, что среднее округляется до 1 десятичного знака.

sprintf("%.1f",track.ratings.average('rating'))
0 голосов
/ 06 апреля 2011

Почему вы не массируете ввод после того, как получили его?Вы должны округлить его до двух десятичных знаков, по моему мнению, и не позволять пользователю беспокоиться об этом.

Rails предлагает round_with_precision , поэтому простой вызов .round (2) для вашего числа с плавающей запятой закруглит егодо 2 десятичных знаков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...