有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我在hector的Cassandra中插入了双/浮点列,却在数据库中得到了不正确的值

我对Hector在Cassandra中插入双精度/浮点数据有一些疑问

new Double("13.45")------->13.468259733915328
new Float("64.13") ------->119.87449

当我把hector的数据插入Cassandra时

TestDouble ch = new TestDouble("talend_bj",
        "localhost:9160");
String family = "talend_1";
ch.ensureColumnFamily(family);
List values = new ArrayList();
values.add(HFactory.createColumn("id", 2, StringSerializer.get(),
        IntegerSerializer.get()));
values.add(HFactory.createColumn("name", "zhang",
        StringSerializer.get(), StringSerializer.get()));
values.add(HFactory.createColumn("salary", 13.45,
        StringSerializer.get(), DoubleSerializer.get()));
ch.insertSuper("14", values, "user1", family, StringSerializer.get(),
        StringSerializer.get());
StringSerializer se = StringSerializer.get();
MultigetSuperSliceQuery<String, String, String, String> q = me.prettyprint.hector.api.factory.HFactory
        .createMultigetSuperSliceQuery(ch.getKeyspace(), se, se, se, se);
// q.setSuperColumn("user1").setColumnNames("id","name")
q.setKeys("12", "11","13", "14");
q.setColumnFamily(family);
q.setRange("z", "z", false, 100);
QueryResult<SuperRows<String, String, String, String>> r = q
        .setColumnNames("user1", "user").execute();
Iterator iter = r.get().iterator();
while (iter.hasNext()) {
    SuperRow superRow = (SuperRow) iter.next();
    SuperSlice s = superRow.getSuperSlice();
    List<HSuperColumn> superColumns = s.getSuperColumns();
    for (HSuperColumn superColumn : superColumns) {
        List<HColumn> columns = superColumn.getColumns();
        System.out.println(DoubleSerializer.get().fromBytes(((String) superColumn.getSubColumnByName("salary").getValue()).getBytes()));
    }
}

你可以看到13.45,但我得到的列值是13.468259733915328


共 (1) 个答案

  1. # 1 楼答案

    你应该把问题一分为二。编写后,如果定义了部分模式或在命令行cli上使用te ASSUBECT关键字,请查看cassandra中的数据,查看其是否正确。PlayOrm有一个精确的单元测试(在astyanax而不是hector上的PlayOrm上),它运行得很好。。。。注意-200.23测试中的比较

    https://github.com/deanhiller/playorm/blob/master/input/javasrc/com/alvazan/test/TestColumnSlice.java

    一旦关闭,您在cassandra中的数据看起来正确吗?如果是这样的话,问题在于读取代码中的值,否则,问题在于写入