以下のデータに対して以下のクエリを使用しています。ただし、これを行うと、すべての列と行で「行1の列 '強度'のデータが切り捨てられました」というエラーが発生します。少し調べてみましたが、私が知る限り、ほとんどの人はテキストや文字を使おうとしているためにこのエラーが発生しています。私はこれまでこの警告を見たことがなく、期待どおりの結果が得られていますが、4,700件の警告があります。
UPDATE userstats
SET strength = (strength * .999),
agility = (agility * .999),
guard = (guard * .999),
labour = (labour * .999),
IQ = (IQ * .999)
WHERE gym_train_since_cron = 0
どんな助けでも大歓迎です!
strength * .999
小数点以下4桁を超える数値になります。これは、これらすべての計算に当てはまります。
警告を回避するには、することができますいずれかのROUNDまたはTRUNCATE計算の結果。例:SET strength = ROUND(strength * .999, 4)
またはSET strength = TRUNCATE(strength * .999, 4)
。
2つの機能の違いは何か疑問に思われるかもしれません。それは丸め動作です。以下のためTRUNCATE
のに対し、それは、0に向かって数を丸めるうROUND
あなたの場合に小数(正確なタイプ)である数値データ型(正確な又は近似)に応じて、次の(から取ら生じ、丸め動作):
正確な値の数値の場合、ROUND()は「切り上げ」ルールを使用します。小数部が0.5以上の値は、正の場合は次の整数に切り上げられ、負の場合は次の整数に切り下げられます。(つまり、ゼロから切り捨てられます。)小数部が0.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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加