在SQL或PHP中自动设置十进制数格式?

在SQL或PHP中自动设置十进制数格式?,php,sql,mysql,Php,Sql,Mysql,在我的数据库中,大多数数值都是十进制(10,6)类型。它们是货币列 现在,当我从mysql中检索数字时,我得到了如下结果 34.123456//我想要这些 0.987654 500.000000//我不想要这些 1.000000 有没有可能让数字在显示时自动显示为整数,并在点后保持小数到我想要的精度,这样我就可以得到例如 34.123456 0.987654 500 1在PHP中,您可以在输出前进行简单的整数比较: echo ((int) $var == $var) ? (int) $var :

在我的数据库中,大多数数值都是十进制(10,6)类型。它们是货币列

现在,当我从mysql中检索数字时,我得到了如下结果

34.123456//我想要这些
0.987654
500.000000//我不想要这些
1.000000

有没有可能让数字在显示时自动显示为整数,并在点后保持小数到我想要的精度,这样我就可以得到例如

34.123456
0.987654
500

1在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

您可以
CAST
将值转换为您希望在SQL端强制执行此精度的任何类型,例如:

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

如果您只想修改显示的数字,则可以与
%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"

+1为了让您在应用程序层上的格式问题上有细微的改变,并使用一个功能来完成所需的工作……然后,每当您希望以一致的格式显示值时,您都必须使用该逻辑+1对于维护噩梦,我实际上更喜欢这个解决方案,而不是必须处理维护问题,尽管我可以看到这个解决方案的价值。然而,我对mysql的了解真的很低,所以可以对所有表只执行一次,比如存储过程之类的吗?或者我甚至必须在PHP文件中的SQL语句中提交此代码?感谢从外观上看,您不能在存储函数中执行此操作,因为返回类型具有两种不同的精度(一个函数应该只返回一个特定的精度)。没有什么可以阻止您将其放入存储过程,但是每次您希望以这种方式传递数据时,都必须调用该存储过程。