【发布时间】:2019-10-25 12:53:00
【问题描述】:
一个简单的问题,在 BigQuery 中使用银行家四舍五入的方法是什么。
这样做的方法很糟糕,但仍然有效:
CREATE TEMP FUNCTION test(num FLOAT64, decimalPlaces INT64)
RETURNS FLOAT64
LANGUAGE js AS """
var d = decimalPlaces || 0;
var m = Math.pow(10, d);
var n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors
var i = Math.floor(n), f = n - i;
var e = 1e-8; // Allow for rounding errors in f
var r = (f > 0.5 - e && f < 0.5 + e) ?
((i % 2 == 0) ? i : i + 1) : Math.round(n);
return d ? r / m : r;
""";
SELECT ROUND(1.525,2)
【问题讨论】:
-
复制自 @tim-down 对 Gaussian/banker's rounding in JavaScript 的回答,发布于 2010 年 6 月 24 日。那里还有一些其他有趣的 cmets。