繁体   English   中英

SQL Server ROUND不起作用

[英]SQL Server ROUND not working

我有一张表,其中一列是Pricedecimal(18,9) )和另一Volumebigint )。

我将两个值相乘,然后应用round函数,但没有任何效果。

我希望它是2小数位精度。 怎么做?

SELECT 
    CAST((Price * Volume) AS decimal(38,2)) test1, 
    ROUND((Price * Volume), 2) 'VolumePrice',  
    CONVERT(DOUBLE PRECISION, (Price * Volume)) 'test2' 
FROM a

表值是这样的:

    Price           Volume
    -------------------------
    63.380000000    131729
    63.380000000     61177
    44.860000000    246475
    44.860000000    246475
    44.860000000     63937
    97.990000000     84620
    191.650000000   438821

我只想将价格乘以数量即可得出总价值。

ROUND()只是向上或向下更改十进制值,而不会更改数据类型的精度。

您想要以2的比例转换为DECIMAL

SELECT 
    CONVERT(DECIMAL(18,2), Price * Volume) AS DecimalConversion
FROM 
    A

将小数位数( Price * Volume )转换为小数位数将自动舍入最后一位:

SELECT 
    CONVERT(DECIMAL(18,2), '1.901999'), -- 1.90
    CONVERT(DECIMAL(18,2), '1.909999'), -- 1.91
    CONVERT(DECIMAL(18,2), '1.905999'), -- 1.91
    CONVERT(DECIMAL(18,2), '1.904999')  -- 1.90

当运算符组合两个具有不同数据类型的表达式时,数据类型优先级规则会指定将优先级较低的数据类型转换为优先级较高的数据类型

来源MSDN文档

在SQL Server中,有关数据类型的优先顺序为:

  1. 十进制
  2. BIGINT

因此bigint被转换为隐式转换为十进制。

如果您需要理想的结果,则只需执行

SELECT 
VolumePrice= cast(Price * Volume as decimal(18,2) ) 
FROM a

查看工作演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM