2009-09-06 34 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