回覆列表
  • 1 # 一口一塊豆腐乳

    decimal型別可以精確地表示非常大或非常精確的小數。大至1028(正或負)以及有效位數多達28位的數字可以作為decimal型別儲存而不失其精確性。該型別對於必須避免舍入錯誤的應用程式(如記賬)很有用。float是浮點數,不能指定小數位。decimal是精確數,可以指定精度。對mysql5來說decimal(p,s)中p最大為65,S最大為30decimal資料型別最多可儲存38個數字,它儲存了一個準確(精確)的數字表達法,不儲存值的近似值。當資料值一定要按照指定精確儲存時,可以用帶有小數的decimal資料型別來儲存數字。float和real資料型別被稱為近似的資料型別。不儲存精確值.當要求精確的數字狀態時,比如在財務應用程式中,在那些需要舍入的操作中,或在等值核對的操作中,就不使用這些資料型別。這時就要用integer、decimal、money或smallmone資料型別。在WHERE子句搜尋條件中(特別是=和<>運算子),應避免使用float或real列。最好限制使用float和real列做>或<的比較。float,double容易產生誤差,對精確度要求比較高時,建議使用decimal來存,decimal在mysql記憶體是以字串儲存的,用於定義貨幣要求精確度高的資料。在資料遷移中,float(M,D)是非標準定義,最好不要這樣使用。M為精度,D為標度。mysql>createtablet1(c1float(10,2),c3decimal(10,2));QueryOK,0rowsaffected(0.02sec)mysql>insertintot1values(1234567.23,1234567.23);QueryOK,1rowaffected(0.01sec)mysql>select*fromt1;+------------+------------+|c1|c3|+------------+------------+|1234567.25|1234567.23|+------------+------------+1rowinset(0.02sec)mysql>insertintot1values(9876543.21,9876543.12);QueryOK,1rowaffected(0.00sec)mysql>mysql>select*fromt1;+------------+------------+|c1|c3|+------------+------------+|1234567.25|1234567.23||9876543.00|9876543.12|+------------+------------+2rowsinset(0.00sec)不定義fload,double的精度和標度時,儲存按給出的數值儲存,這於OS和當前的硬體有關。decimal預設為decimal(10,0)因為誤差問題,在程式中,少用浮點數做=比較,可以做range比較。如果數值比較,最好使用decimal型別。精度中,符號不算在內:mysql>insertintot1values(-98765430.21,-98765430.12);QueryOK,1rowaffected(0.01sec)mysql>select*fromt1;+--------------+--------------+|c1|c3|+--------------+--------------+|1234567.25|1234567.23||9876543.00|9876543.12||-98765432.00|-98765430.12|+--------------+--------------+3rowsinset(0.00sec)float佔4個位元組,double佔8個位元組,decimail(M,D)佔M+2個位元組

  • 中秋節和大豐收的關聯?
  • 在華銷量慘淡,馬自達人事調整,還自命不凡嗎?