我在蒙戈一些文件具有雙打作爲各自領域中的一種:的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