2

给定 BigQuery 表:

在此处输入图像描述

以及以下客户端代码:

private void testTypes(Iterable<TableRow> table) {
        for(TableRow tr: table){
            Object x = tr.get("an_integer");
            Object y = tr.get("a_float");
            Object z = tr.get("a_string");
            System.out.println(x.getClass().getTypeName());
            System.out.println(y.getClass().getTypeName());
            System.out.println(z.getClass().getTypeName());
        }
}

它产生:

java.lang.String
java.lang.Double
java.lang.String

为什么为 INTEGER 返回字符串?

为什么为 FLOAT 返回 Double?

4

1 回答 1

3

似乎您有两条评论来解释这种行为。我将把它们复制到这里来真正回答你的问题

莫莎帕苏曼斯基

“我可以为 FLOAT 回答 DOUBLE - 它只是一个术语。在 BigQuery 中,FLOAT 表示 64 位浮点数(在许多其他商业数据库中相同),而在 Java 中,Double 表示 64 位浮点数。”

来自Michael Sheldon
“我可以回答 STRING 的 INTEGER 问题。某些语言 (Javascript) 将所有数字表示为浮点数,这意味着并非所有 64 位整数都可以表示。为了避免这种意外舍入,INTEGER 在线。这导致它们在 Java 中显示为字符串“

于 2015-03-24T18:24:56.790 回答