none
ROUND四舍五入的问题:15 和 0.945 放入两个变量后,相乘取2位小数后,没有四舍五入 RRS feed

  • 问题

  • --1. 查询结果为 14.180,此处无疑问

    SELECT round(15*0.945,2)  

    --2. 查询结果为 14.17 ,为什么?

    DECLARE @JG FLOAT
    ,@SL FLOAT
    SET @JG = 0.945
    SET @SL = 15
    SELECT  ROUND(@JG*@SL,2)

    2017年5月16日 8:37

全部回复

  • 试下这几句

    DECLARE @JG DECIMAL(18,4)
    ,@SL DECIMAL(18,4)
    SET @JG = 0.945
    SET @SL = 15
    SELECT  ROUND(@JG*@SL,2)

    结果是14.18


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年5月17日 0:36
  • 你好,

    你可以使用STR (Transact-SQL)查看实际的计算值。

    DECLARE @JG FLOAT
    	, @SL FLOAT
    SET @JG = 0.945
    SET @SL = 15
    SELECT STR(@JG*@SL, 20, 16)

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年5月17日 3:12
    版主
  • 建议您了解一下浮点数的存储原理。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。

    如果你希望得到准确的结果,请采用定点数据类型,如decimal。


    想不想时已是想,不如不想都不想。

    2017年5月17日 8:38
    版主