Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  * Copyright (c) 2013, Francis Galiegue <>
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the Lesser GNU General Public License as
  * published by the Free Software Foundation, either version 3 of the
  * License, or (at your option) any later version.
  * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * Lesser GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <>.
package com.github.fge.jsonschema.keyword.digest.helpers;
A specialized digester for numeric keywords

This digester ensures that, for instance, values 1, 1.0 and 1.00 produce the same digest. It also stores another important information: whether that number can be reliably represented as a long. If this is not the case, for accuracy reasons, java.math.BigDecimal is used.

public abstract class NumericDigester
    extends AbstractDigester
    protected NumericDigester(final String keyword)
    private static boolean valueIsLong(final JsonNode node)
        if (!node.canConvertToLong())
            return false;
        if (NodeType.getNodeType(node) == .)
            return true;
        return node.decimalValue().remainder(.)
            .compareTo(.) == 0;
    protected final ObjectNode digestedNumberNode(final JsonNode schema)
        final ObjectNode ret = .objectNode();
        final JsonNode node = schema.get();
        final boolean isLong = valueIsLong(node);
        if (isLong) {
                ? .numberNode(node.intValue())
                : .numberNode(node.longValue()));
            return ret;
        final BigDecimal decimal = node.decimalValue();
        ret.put(decimal.scale() == 0
            ? .numberNode(decimal.toBigIntegerExact())
            : node);
        return ret;
New to GrepCode? Check out our FAQ X