我在下面的数据上使用以下查询。但是,当我这样做时,我收到错误"数据被截断为列'力量'在第1行和第34行;对于每个列和行。我研究了一下,据我所知,大多数人都会收到此错误,因为他们正在尝试使用文本或字符。我之前从未见过这个警告,而且我得到了预期的结果,但有4,700个警告。
request.onload = function () {
var txt = request.responseText + "\n//# sourceURL=" + file + "\n";
try {
var script = domDocument.createElement("script"),
head = domDocument.head || domDocument.getElementsByTagName("head")[0];
script.defer = true;
script.text = txt;
head.appendChild(script);
} catch (e) {
domWindow.onerror("Error loading js.", file, 0, 0, e, txt);
}
request.onload = function () { };
};
非常感谢任何帮助!
答案 0 :(得分:1)
strength * .999
导致一个小数位数超过4的数字。这适用于所有这些计算。
要避免出现警告,您可以ROUND或TRUNCATE计算结果。例如:SET strength = ROUND(strength * .999, 4)
或SET strength = TRUNCATE(strength * .999, 4)
。
您可能想知道这两个功能之间的区别是什么;它是舍入行为。对于TRUNCATE
,它会将数字向0舍入,而ROUND
则取决于数值数据类型(精确或近似),在您的情况下为十进制(精确类型),会发生以下情况(取自Rounding Behavior):
对于精确值数字,ROUND()使用“round half up”规则:如果为正数,则小数部分为.5或更大的值将向上舍入到下一个整数,如果为负,则向下舍入到下一个整数。 (换句话说,它从零开始舍入。)小数小于.5的值向下舍入到下一个整数(如果为正)或者如果为负则向下舍入到下一个整数。
为了演示,这里是一个使用样本数据中用户4898的强度值的示例:
strength * .999 = 16331143.7521566 -- Over 4 decimal places, hence the warning
ROUND(strength * .999, 4) = 16331143.7522 -- Rounds up
TRUNCATE(strength * .999, 4) = 16331143.7521 -- Rounds down