【问题标题】:Google Bigquery - Representing float as string without loosing the precisionGoogle Bigquery - 将浮点数表示为字符串而不丢失精度
【发布时间】:2017-11-14 13:14:00
【问题描述】:

在 Google bigquery 中,只是好奇:有没有一种简单的方法可以将浮点值呈现为字符串而不会失去其精度。

目前:

select 
  string(float_value) as str_float_value,
  cast(float_value as string) as cast_float_value_as_string, 
  float_value as original_float_value
from  (select 33.7474782 as float_value); 

这会给你回报:

Row | str_float_value | cast_float_value_as_string | original_float_value
----+-----------------+----------------------------+---------------------
1   | 33.7475         | 33.7475                    | 33.7474782 

有没有更好的方法可以在不丢失精度的情况下将浮点数作为字符串?

[上下文:我有一些用例,其中有 2 个不同的表,其中一个包含小数值的字符串列和另一个包含常规浮点列的表,我总是可以将字符串转换为浮点数,然后加入将起作用。但只是好奇是否有任何方法可以在不丢失精度的情况下将浮点数作为字符串]

【问题讨论】:

  • 感谢 Elliott 的快速编辑

标签: string floating-point google-bigquery precision


【解决方案1】:

看起来旧版 SQL 在将浮点值转换为字符串时保留的精度较低。你可以改用standard SQL 吗?这是我看到的:

$ bq query "SELECT CAST(float_value AS STRING) AS float_string, float_value FROM (SELECT 33.7474782 AS float_value);"
+--------------+-------------+
| float_string | float_value |
+--------------+-------------+
| 33.7475      |  33.7474782 |
+--------------+-------------+

$ bq query --use_legacy_sql=false "SELECT CAST(float_value AS STRING) AS float_string, float_value FROM (SELECT 33.7474782 AS float_value);" 
+--------------+-------------+
| float_string | float_value |
+--------------+-------------+
| 33.7474782   |  33.7474782 |
+--------------+-------------+

【讨论】:

  • 很好,这很有趣,我不知道标准 sql 保留所有精度。是的,我可以在需要时切换到标准 SQL。感谢您的回答。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多