/** * Create an instance with the given high and low order bits representing this Decimal128 as an IEEE 754-2008 128-bit decimal * floating point using the BID encoding scheme. * * @param high the high-order 64 bits * @param low the low-order 64 bits * @return the Decimal128 value representing the given high and low order bits */ public static Decimal128 fromIEEE754BIDEncoding(final long high, final long low) { return new Decimal128(high, low); }
@Override public long longValue() { return value.bigDecimalValue().longValue(); }
return clazz.cast(new Decimal128((Integer) value)); } else if (value instanceof Long) { return clazz.cast(new Decimal128((Long) value)); } else if (value instanceof Double) { return clazz.cast(new BsonDouble((Double) value).decimal128Value()); } else if (value instanceof String) { return clazz.cast(Decimal128.parse((String) value));
static long decodeLong(final BsonReader reader) { long longValue; BsonType bsonType = reader.getCurrentBsonType(); switch (bsonType) { case INT32: longValue = reader.readInt32(); break; case INT64: longValue = reader.readInt64(); break; case DOUBLE: double doubleValue = reader.readDouble(); longValue = (long) doubleValue; if (doubleValue != (double) longValue) { throw invalidConversion(Long.class, doubleValue); } break; case DECIMAL128: Decimal128 decimal128 = reader.readDecimal128(); longValue = decimal128.longValue(); if (!decimal128.equals(new Decimal128(longValue))) { throw invalidConversion(Long.class, decimal128); } break; default: throw new BsonInvalidOperationException(format("Invalid numeric type, found: %s", bsonType)); } return longValue; }
Decimal128 decimal128 = reader.readDecimal128(); try { doubleValue = decimal128.doubleValue(); if (!decimal128.equals(new Decimal128(new BigDecimal(doubleValue)))) { throw invalidConversion(Double.class, decimal128);
case DECIMAL128: Decimal128 decimal128 = reader.readDecimal128(); intValue = decimal128.intValue(); if (!decimal128.equals(new Decimal128(intValue))) { throw invalidConversion(Integer.class, decimal128);
@Override public Decimal128 read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) { in.nextNull(); return null; } if (in instanceof BsonReader) { return ((BsonReader) in).unwrap().readDecimal128(); } return Decimal128.parse(in.nextString()); }
@Override public void convert(final Decimal128 value, final StrictJsonWriter writer) { writer.writeRaw(format("NumberDecimal(\"%s\")", value.toString())); } }
@Override public Decimal128 doReadDecimal128() { long low = bsonInput.readInt64(); long high = bsonInput.readInt64(); return Decimal128.fromIEEE754BIDEncoding(high, low); }
private Decimal128 visitNumberDecimalExtendedJson() { verifyToken(JsonTokenType.COLON); Decimal128 value; String decimal128AsString = readStringFromExtendedJson(); try { value = Decimal128.parse(decimal128AsString); } catch (NumberFormatException e) { throw new JsonParseException(format("Exception converting value '%s' to type %s", decimal128AsString, Decimal128.class.getName()), e); } verifyToken(JsonTokenType.END_OBJECT); return value; }
@Override public void write(JsonWriter out, Decimal128 value) throws IOException { if (value == null) { out.nullValue(); } else if (out instanceof BsonWriter) { ((BsonWriter) out).unwrap().writeDecimal128(value); } else { out.value(value.toString()); } }
(com.torodb.mongowp.bson.BsonDecimal128) value; return new org.bson.BsonDecimal128( Decimal128.fromIEEE754BIDEncoding(casted.getHigh(), casted.getLow()));
@Override public Decimal128 decimal128Value() { return new Decimal128(value); }
@Override public double doubleValue() { return value.bigDecimalValue().doubleValue(); }
@Test public void read() throws Exception { BsonDocument doc = new BsonDocument(); doc.put("int", new BsonDecimal128(Decimal128.parse(Integer.toString(Integer.MAX_VALUE)))); doc.put("long", new BsonDecimal128(new Decimal128(Long.MAX_VALUE))); doc.put("double", new BsonDecimal128(Decimal128.parse("12.111"))); JsonReader reader = Jsons.asGsonReader(doc); reader.beginObject(); check(reader.nextName()).is("int"); check(reader.peek()).is(JsonToken.NUMBER); check(reader.nextInt()).is(Integer.MAX_VALUE); check(reader.nextName()).is("long"); check(reader.peek()).is(JsonToken.NUMBER); check(reader.nextLong()).is(Long.MAX_VALUE); check(reader.nextName()).is("double"); check(reader.peek()).is(JsonToken.NUMBER); check(reader.nextDouble()).is(12.111D); reader.endObject(); reader.close(); }
o = Long.valueOf((String) b.get("$numberLong")); } else if (b.containsField("$numberDecimal")) { o = Decimal128.parse((String) b.get("$numberDecimal"));
@Override public void convert(final Decimal128 value, final StrictJsonWriter writer) { writer.writeStartObject(); writer.writeName("$numberDecimal"); writer.writeString(value.toString()); writer.writeEndObject(); } }
@Override public Decimal128 decimal128Value() { return new Decimal128(value); }