2012-02-06 173 views
6

希望只是一個簡單的問題。我在我的數據庫中有一個DECIMAL列。該值是一個非常小的小數部分 - 總計這個值的所有行將等於1.如何在PHP中使用MySQL Decimal數據類型?

現在我想在我的php應用程序中使用該值,顯示它,對其執行計算並將其保存回數據庫。

由於php只有integerfloat類型,在php中使用該值的最佳方式是什麼,以免失去計算或顯示的精度?

  • 保留值作爲一個字符串,並使用BC數學的計算
  • 鑄成float數量 - 我知道PHP花車精確到好一些(根據不同的操作系統)
  • 值轉換爲一個使用記憶指數的函數的整數
  • 還有其他的東西嗎?

感謝

+0

保持它爲一個字符串將保持準確性,但一旦你開始對它做數學,所有的投注都關閉。 – 2012-02-06 14:35:21

+3

我會使用[BC數學](http://www.php.net/manual/en/intro.bc.php) – 2012-02-06 14:40:25

回答

0

你應該去float在計算不會丟失精度和使用number_format輸出顯示...

注:
這真的取決於你的需要,以及如何希望你的輸出處理,如果你希望在第二個數字後減少尾數或做一些舍入。:

與秤2 BC數學的使用例如2.10/1.10同時使用 number_format(2.10/1.10, 2)將導致1.91(四捨五入的結果就像SELECT CAST(2.10/1.10 as DECIMAL(10,2))

更新產生1.90。 正如評論中所述,可能會有一些情況會在計算中失去精確度。 在MySQL本身中進行任意精度計算可能會更好,所以您可以確定在數學運算中沒有任何鬆動。

+0

任何解釋,如爲什麼會發生什麼,有什麼優點和缺點? – 2012-02-06 14:44:46

+1

如果@Bendos想要執行任意精度算術,那麼使用浮點數不是一個好主意。如果計算中的某個階段涉及無法用浮點格式表示的數字,則精度將會丟失。 – Hammerite 2012-02-06 14:56:45

+0

@Hammerite,謝謝。我已更新我的答案,以注意此 – 2012-02-06 15:25:40

相關問題