代码之家  ›  专栏  ›  技术社区  ›  Giorgos Myrianthous

Kafka Consumer以字符串格式向上舍入十进制

  •  2
  • Giorgos Myrianthous  · 技术社区  · 6 年前

    我有一个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 但是卡夫卡的消费者把这个值四舍五入到 154712.0 .

    我还注意到左边最多有4个数字的值 3982.95 不向上取整,数值左边有5位(如 43982.68 )将四舍五入到小数点后一位( 43982.7 )

    我该如何处理这个问题?

    1 回复  |  直到 6 年前
        1
  •  0
  •   lloiacono Suresh Kumar Amrani    6 年前

    为什么使用数据类型 string 对于 平衡 ?

    https://avro.apache.org/docs/1.8.2/spec.html#schema_primitive

    你可以用 float double

    {  
    "data":{  
        "NAME":{  
        "string":"GIORGOS"
        },
        "BALANCE":{  
        "float":154561.5800000000
        }
    },
    "op":"INSERT"
    }