2016-08-18 7 views
0

以下のデータに対して以下のクエリを使用しています。しかし、私がこれを行うと、「列1と行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 

Database columns Database rows

任意の助けいただければ幸いです!

+0

'強度*以上の4桁を持つことになりますので、それを切り捨てています.999'結果したがって、エラーです。実際には、この計算のすべてに当てはまります。 –

+0

@JonathonOgden私はそれが本当かどうか疑問に思った。私のログが同じことについて毎日4,700の警告でいっぱいにならないように、結果の数字を小数点以下4桁に丸めるためにとにかくあるのだろうか? – alexander7567

+0

@ JonathonOgden別のスタックオーバーフローの質問でその答えが見つかりました.. http://stackoverflow.com/questions/11190668/format-number-to-2-decimal-placesあなたのコメントを回答と私はそれをマークします。 – alexander7567

答えて

1

strength * .999は、小数点以下4桁以上の数値になります。それはこれらの計算のすべてに当てはまります。

警告を回避するには、計算結果をROUNDまたはTRUNCATEにすることができます。たとえば、SET strength = ROUND(strength * .999, 4)またはSET strength = TRUNCATE(strength * .999, 4)です。

2つの機能の違いは何ですか?それは丸めの振る舞いです。 TRUNCATEことがROUND一方、0に向かって数を丸めるし、あなたの場合には(正確なタイプ)小数である数値データ型(正確な又は近似)に応じて、次の(Rounding Behaviorから採取)が発生:

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 
+0

大きな説明、ソース、および例。お手伝いいただきありがとうございます! – alexander7567

関連する問題