Как проверить значение поля цифры 1000 * в реакции с помощью Yup? Я хочу проверить, указано ли число с шагом 0,01 или 0,1 - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть приведенный ниже код для проверки числового значения c, обеспечивающего приращение в 'дробь' i, которое отлично работает для 0,25, 0,5 и c, но не 0,1, 0,01

export function buildFractionStepTest(message: () => string,fraction: number): Yup.TestOptions{  return {
name: 'fractionStepNumericValue',
test: (value: number | null) =>
typeof value !== 'number' || value % fraction === 0,
message  };}

ValidationSchema = (): Yup.Schema<any> => {
return Yup.object().shape(
  {
fieldname : Yup.number().test(
buildFractionStepTest(() => {
  return `Value for field must be the nearest multiple of ${formattingSettings.step}`;
}, formattingSettings.step)  );}}    

Два нижеследующих случая проверяются надлежащим образом

Пример: дробь = 0,5
Допустимые значения Numeri c: 0,5, 1, 1,5, 2 и т. c ( кратно 0,5)
Недопустимые значения: 0,6, 1,1, 1,3 и т. д. c

Фракция: 0,25 Допустимые значения: 0,25, 0,5, 0,75, 1 и т. c (кратно 0,25)
Неверные значения: 0,3, 0,8, 1,3, 1,6 и т. Д. c

Проблема возникает для
Фракции: 0,1 / 0,01

1 Ответ

0 голосов
/ 24 апреля 2020

Хорошо, я понял, что это работает. Размещать его можно только в том случае, если кто-то сталкивается с подобной проблемой, возможно, это не идеальное решение, но это работает для двух десятичных дробей и требует изменения умножения на 100, чтобы генерировать его динамически на основе точности (100 / 1000/10000 et c)

export function buildFractionStepTest(message: () => string,  fraction: number): Yup.TestOptions {  return {
name: 'fractionStepNumericValue',
test: (value: number | null) =>
  typeof value !== 'number' ||
  value % fraction === 0 ||
  Number((value * 100).toFixed(0)) % Number((fraction * 100).toFixed(0)) ===
    0,
message  };}
...