MySQL,将默认舍入更改为超过四位数

时间:2014-05-02 15:55:36

标签: mysql sql precision

刚刚发现这个查询:

SELECT 1 / 1000000;

将返回0,这对于我们在进行增值计算时的经济计划来说是一个小灾难。如何在不更改每个查询的情况下设置默认小数位数?

修改

手头的例子是从净值获得大桶部分,6%增值税。 6 / 106 = 0.056603773...,但SELECT 6 / 106 = 0.0566

3 个答案:

答案 0 :(得分:2)

正如Arithmetic Operators所述:

  

在使用/执行的除法中,使用两个精确值操作数时的结果比例是第一个操作数的比例加上div_precision_increment系统变量的值(默认值为4) )。例如,表达式5.05 / 0.014的结果具有六位小数(360.714286)的比例。

因此,要么:

  • 根据您的需要增加div_precision_increment

    SET div_precision_increment = 6;
    

    或者,要全局设置(即在所有未来的会话中):

    SET GLOBAL div_precision_increment = 6;
    

    甚至可以在命令行的选项文件的[mysqld]部分设置它,以确保它能够在服务器重启后继续存在。

  • 将操作结果显式地转换为具有所需比例的类型:

    SELECT CAST(1 / 1000000 AS DECIMAL(10,8));
    

答案 1 :(得分:1)

您可以将结果转换为任何数据类型。在sql下面,将结果转换为十进制,精度为10。

select cast(1 / 1000000 as decimal(10,10));

修改 结果取决于您的数据类型。试试这个:

SELECT 6.000000 / 106.000000;

如果您的数据是必需精度的十进制数,那么您的结果将是十进制且具有足够的精度。所以我认为您应该更新数据库中的日期类型。

答案 2 :(得分:1)

在万欧元促销中尝试净增值税:

SELECT 10000 * (6/106)

我相信你会看到正确的计算:566.0377

如果您希望它显示四舍五入到小数点后两位,请执行以下操作:

SELECT ROUND(10000*(6/106),2)

您可能希望将您的货币(货币)数据类型表示为DECIMAL。例如,产品单价可能表示为

  DECIMAL(10,2) 

允许美元/磅/欧元和百分之一。

然后你的算术不应该失去精确度。例如,

 SELECT 24*(6/106)*CAST(1.20 AS DECIMAL(10,2))

将在24个项目上产生6%的净增值税,每个项目的成本为1.20。

为了实现这一目标,而不需要查看大量查询,您可能需要更改一些列'定义。

我在MariaDB 10,MySQL 5.1,5.5和5.6上试过这个。看起来很好。