2017-02-27 2 views
2

JSON Schema을 사용하여 서버 요청의 유효성을 검사하고 몇 가지 값을 2DP로 확인합니다. 나는이 필드를 검증하기 위해 다음과 같은 스키마를 사용했다 :.49 또는 .99로 끝나는 숫자에 대해 multipleOf 0.01에 대한 유효성 검사 오류를 제공하는 스키마

'properties': { 
    'amount': {'type': ['number', 'null'], 'multipleOf': 0.01} 
} 

이 내가 오류 amount is not a multiple of (divisible by) 0.01을받을 0.49 또는 0.99,로 끝나는 숫자 이외의 모든 경우에 작동합니다.

이것은 아마도 일종의 부동 소수점 오류 일 것입니다. 이것이 올바르지 않은 경우 숫자를 특정 정밀도로 어떻게 검증해야합니까?

+0

내가 AJV에서 옵션 multipleOfPrecision을 정의했다 https://github.com/epoberezkin/ajv – esp

답변

0

Issues #185에 따르면 부동 소수점 산술 문제를 방지하기 위해 숫자를 소수로 캐스팅해야합니다.

2

을 통해 반복하고 위에 제시로 소수 캐스팅 피하기 위해, 나는 정의 유효성 검사기를 작성 결국 :

Validator.prototype.customFormats.currency = function(input) { 
    if (input === undefined) { return true} 
    return (input * 100) % 1 === 0 
}