我在蒙戈一些文件具有双打作为各自领域中的一种:的Java蒙戈驱动转换双打科学记数法上阅读
{
"_id" : "1b1a39a7-5a04-4a0c-9a9e-658b5c95b58d",
"content" :
{
"NumTaux" : 0.00196713814946994,
"SourceYear" : NumberInt(2017),
"Year" : NumberInt(2020),
"Age" : NumberInt(-1),
"Sex" : "F"
}
}
我用蒙戈Java驱动程序写入并从我们的Mongo读取。 当我阅读这些文件,双打有时转化为科学记数法:
我试着写双打定制编解码器解决这个:
public class DoubleCodec implements Codec<Double> {
@Override
public Double decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readDouble();
}
@Override
public void encode(BsonWriter writer, Double value, EncoderContext encoderContext) {
writer.writeDouble(value);
}
@Override
public Class<Double> getEncoderClass() {
return Double.class;
}
}
并将其添加到我的收集的注册表:
DoubleCodec doubleCodec = new DoubleCodec();
CodecRegistry registry = CodecRegistries.fromRegistries(MongoClient.getDefaultCodecRegistry(),
CodecRegistries.fromCodecs(doubleCodec));
matrixDataCollection = MongoFactory.obtainSyncClient(config)
.getDatabase(config.getString(MONGO_DB))
.getCollection(MATRIX_DATA_COLLECTION)
.withCodecRegistry(registry);
但是,这似乎并不奏效,编解码器中的解码方法是从来没有叫我尽可能地看到(断点/系统输出) 我怀疑已经存在的Double编解码器被调用。
有什么办法可以让我自己的DoubleCodec被调用而不是默认的,或者有另外一种方法来配置默认双编解码器的行为方式吗?
是不是只是一个'双的toString()'方法的输出? – Veeram
不这么认为: 调试器显示一个字符串表示形式,但总是可以展开值字段以查看实际值(对于实际字符串,例如显示底层CharSequence)。 当我查看Bson文档中双精度的真实值时,它显示了一些0.0019671381496994和其他的原始值,其他值为5.58600702289802E-4 – Infiniteh