簡體   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