我将Java 8与MongoDb 4.0.8结合使用以下列方式保存文档:
String jsonStrParam = "";
ObjectMapper obj = new ObjectMapper();
Document document = new Document();
BigDecimal first = new BigDecimal("1115.37");
BigDecimal second = new BigDecimal("1000.00");
try
{
jsonStrParam = obj.writeValueAsString(myParameter);
}
catch (JsonProcessingException e)
{
LOG.info(e.toString(), e);
}
document.put("first", first);
document.put("second", second);
document.put("timestamp", new Date()); //
etc.
try
{
collection.insertOne(document);
}
etc.
文件已保存。
要加载文档,我使用以下代码段:
String findKey = "_id";
ObjectId myObjId = new ObjectId(id);
Document myDoc = collection.find(eq(findKey, myObjId)).first();
String myDocToJson = myDoc.toJson();
System.out.println(myDocToJson);
Gson gson = new GsonBuilder().setPrettyPrinting().create();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
Map<String, Object> map = mapper.readValue(myDocToJson, Map.class);
结果如下:
{"_id": {"$oid": "5caafc2e3ca1b36dd2cfc5f0"},
"first": {"$numberDecimal": "1115.37"},
"second": {"$numberDecimal": "1000.00"}, etc.
我的问题是我无法解析BigDecimal
值(即JSON中的$numericDecimal
)的准确性。
我已经尝试过投放,并且进行了不同的转换,但都无济于事。
我已经将它们转换为字符串,使用正则表达式提取了数值并从
生成了BigDecimal
这是一个黑客解决方案。
我的问题是,读取/转换“值”“第一”这样的规范方法是哪一种:{"$numberDecimal": "1115.37"}
作为BigDecimal
?