一个简单的问题,在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)
ROUND()
提供银行家取整,也称为HALF UP取整
重要的是四舍五入的精度。在您要询问的货币方面,给定货币的最小单位是多少(分,欧元,美元等的单位为0.01)。
因此,如果要舍入到[[N小数位数,请像下面这样向Round()
调用提供N:
ROUND(3.1415926) = 3 //default number of fraction digits is ZERO
ROUND(3.1415926, 4) = 3.1416 //9 on 5th decimal place moved 5 on 4th decimal place UP
ROUND(3.1415926, 3) = 3.142
ROUND(3.1415926, 2) = 3.14
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)