有没有一种简单的方法可以将科学记数法中的数字转换为浮点数? 例如:
8.32E-4 to 0,08
答案 0 :(得分:2)
我认为这可能是出于举报目的吗?这会为你解决吗?
SELECT FORMAT("%.10f", 8.32E-8) number UNION ALL
SELECT FORMAT("%.6f", 8.32E-4) UNION ALL
SELECT FORMAT("%4.f", 8.32E+4) UNION ALL
SELECT FORMAT("%10.f", 8.32E+8)
答案 1 :(得分:1)
我知道这是一个比较老的问题,但是对于任何寻求解决方案的人来说,该查询(尽管有些笨拙)应该适用于所有科学记数法领域。
困难之处在于,BigQuery会将大于E±3的任何数字转换为科学计数法。解决方法是将数字转换为字符串。如果您将此输出用于报告目的,那应该没问题。如果需要处理数字,请确保在转换之前已完成所有计算:
SELECT
number
,base_num
,exponent
,CASE WHEN REGEXP_EXTRACT(number, r'E([+-])') = '+'
THEN REGEXP_EXTRACT(STRING((base_num * (POW(10, exponent)))), r'(\d+\.0)')
ELSE STRING(base_num * (POW(10, (exponent * -1))))
END AS converted_number
FROM
(SELECT
number
,FLOAT(REGEXP_EXTRACT(number, r'(.*)E')) base_num
,INTEGER(REGEXP_EXTRACT(number, r'E[+-](\d+)')) exponent
FROM
(SELECT "8E+1" AS number)
,(SELECT "1.6E-3" AS number)
,(SELECT "8.32E-4" AS number)
,(SELECT "2.92E+9" AS number)
)
说明:
FLOAT(REGEXP_EXTRACT(number, r'(.*)E'))
返回E之前的数字(作为字符串),然后将其转换为浮点数。
INTEGER(REGEXP_EXTRACT(number, r'E[+-](\d+)'))
返回E后面的数字(作为字符串),然后将其转换为整数。
然后,将指数提高10(如果为负,则反之),然后乘以基数。
最后,将其强制转换为字符串以保持非科学符号。对于大于1的数字,请使用正则表达式将小数点后的数字四舍五入为0,以便于阅读。
输出:
Row number base_num exponent converted_number
1 8E+1 8.0 1 80.0
2 1.6E-3 1.6 3 0.001600
3 8.32E-4 8.32 4 0.000832
4 2.92E+9 2.92 9 2920000000.0