2009-09-06 40 views
0

在我的DB中,大多數數值都是DECIMAL(10,6)類型。他們是貨幣列。SQL或PHP中的自動十進制數字格式?

現在,當我取回從MySQL的數字,我得到這樣的事情

34.123456 //我想這些
0.987654
500.000000 //我不希望這些
1.000000

是否可以讓數字自動顯示爲整數,並在點後保留小數以達到我想要的精度,以便我得到例如

34.123456
0.987654

回答

2

如果你想要的是修改顯示的數字,那麼你可以使用printf%g格式和指定的精度最大位數:

printf ("%.10g", 123.456); // outputs "123.456" 
printf ("%.10g", 123.456000000); // outputs "123.456" 
printf ("%.10g", 123.000000000); // outputs "123" 
printf ("%.10g", 1.234567891); // outputs "1.234567891" 
+0

+1微妙的微調擔心應用程序層的格式化,並使用一個函數*完全*需要什麼。 – Eric 2009-09-06 21:38:42

+0

...然後你必須在每次你想以一致的格式顯示值時使用邏輯。 +1維護噩夢 – 2009-09-06 22:32:12

0

在PHP中,你可以在輸出前做一個簡單的整數比較:

echo ((int) $var == $var) ? (int) $var : $var; 

作爲一個快速/骯髒例如,此代碼:

$var = '500.01'; 
echo ((int) $var == $var) ? (int) $var : $var; 
echo "\n"; 
$var = '500.00'; 
echo ((int) $var == $var) ? (int) $var : $var; 

產地:

500.01 
500 
0

可以CAST值,以你喜歡的SQL方執行這一精度,例如任何類型:

SELECT 
    CASE myNumber MOD 1 
    WHEN 0 THEN CAST(myNumber AS decimal(10,0)) 
    ELSE myNumber 
    END 
FROM myTable; 
+0

其實我更喜歡這個解決方案必須應付與維護問題,雖然我可以看到那個價值。然而,我的mysql知識真的很低,所以對於所有表只需要一次,就像存儲過程一樣?或者,我還必須在PHP文件中的SQL語句中提交此代碼嗎?謝謝 – faboolous 2009-09-09 02:03:53

+0

從外觀看,你不能在存儲函數中做到這一點,因爲返回類型有兩種不同的精度(一個函數只應該返回一個特定的精度)。沒有什麼能阻止你把它放到sProc中,但是每次你想用這種方式來處理數據時你都必須調用這個sProc。 – 2009-09-09 13:17:12