Skip to content

Commit 3b50c53

Browse files
authored
Merge pull request #243 from seamusv/rounding_multipleOf
Improve accuracy of rounding with multipleOf
2 parents d95b85b + 0fac9c1 commit 3b50c53

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

src/main/java/com/networknt/schema/MultipleOfValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
4848
// convert to BigDecimal since double type is not accurate enough to do the division and multiple
4949
BigDecimal accurateDividend = new BigDecimal(String.valueOf(nodeValue));
5050
BigDecimal accurateDivisor = new BigDecimal(String.valueOf(divisor));
51-
if (Math.abs(accurateDividend.divideAndRemainder(accurateDivisor)[1].doubleValue()) > 1e-12) {
51+
if (accurateDividend.divideAndRemainder(accurateDivisor)[1].abs().compareTo(BigDecimal.ZERO) > 0) {
5252
return Collections.singleton(buildValidationMessage(at, "" + divisor));
5353
}
5454
}

src/test/java/com/networknt/schema/V7JsonSchemaTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,4 +409,9 @@ public void testUniqueItemsValidator() throws Exception {
409409
runTestFile("draft7/uniqueItems.json");
410410
}
411411

412+
@Test
413+
public void testMultipleOfScale() throws Exception {
414+
runTestFile("multipleOfScale.json");
415+
}
416+
412417
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
[
2+
{
3+
"description": "by deep scale",
4+
"schema": {"multipleOf": 0.25},
5+
"tests": [
6+
{
7+
"description": "8.75 is multiple of 0.25",
8+
"data": 8.75,
9+
"valid": true
10+
},
11+
{
12+
"description": "8.750000000001 is not multiple of 0.25",
13+
"data": 8.750000000001,
14+
"valid": false
15+
},
16+
{
17+
"description": "8.7500000000001 is not multiple of 0.25",
18+
"data": 8.7500000000001,
19+
"valid": false
20+
},
21+
{
22+
"description": "8.75000000000001 is not multiple of 0.25",
23+
"data": 8.75000000000001,
24+
"valid": false
25+
}
26+
]
27+
}
28+
]

0 commit comments

Comments
 (0)