我有一个Avro格式的主题,其中包含类似于以下内容的数据:
{
"data":{
"NAME":{
"string":"GIORGOS"
},
"BALANCE":{
"string":"154711.5800000000"
}
},
"op":"INSERT"
}
和使用此主题中数据的Kafka使用者(我的接收器连接器包含一些转换,因此仅解析data
片段)
while (true) {
try {
ConsumerRecords<String, GenericRecord> records = consumer.poll(200);
for (ConsumerRecord<String, GenericRecord> record : records) {
System.out.println("TESTING 1: " + record.value());
System.out.println("TESTING 2: " + record.value().toString());
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
输出为:
TESTING 1: {"NAME": "GIORGOS", "BALANCE": 154712.0}
TESTING 2: {"NAME": "GIORGOS", "BALANCE": 154712.0}
这里的问题是主题中的原始BALANCE
是154561.5800000000
,但Kafka Consumer正在将该值四舍五入到154712.0
。
我还注意到,3982.95
左边最多4位的值不被四舍五入,而左边5位数字(例如43982.68
)的值将四舍五入到小数点后一位点(43982.7
)。
我应该如何处理此问题?
答案 0 :(得分:0)
您为什么将数据类型string
用于 BALANCE ?
https://avro.apache.org/docs/1.8.2/spec.html#schema_primitive
您可以改用float
或double
{
"data":{
"NAME":{
"string":"GIORGOS"
},
"BALANCE":{
"float":154561.5800000000
}
},
"op":"INSERT"
}