SQL舍入到小数位

时间:2017-09-13 15:11:31

标签: sql sql-server rounding

我有一个数据集,我需要对价格和圆形到小数位进行计算。但结果并不是预期的结果。计算在案例陈述中

CREATE TABLE #Temp ( ID INT IDENTITY(1,1), Price DECIMAL(7,2) )

INSERT INTO #TEMP ( Price )
VALUES ( 119.99 )
        , ( 48.99 )

SELECT
    ID
    , Price
    , CASE WHEN Price > 10 THEN CONVERT( DECIMAL(7,2), Price * 1.08 - 0.05 ) END AS RRP
FROM #Temp

DROP TABLE #Temp

结果

ID  Price   RRP
1   119.99  129.54
2   48.99   52.86

如果可以与另一个数据集匹配,我需要在同一个案例陈述中得到129.54到129.55和52.86到52.85

2 个答案:

答案 0 :(得分:1)

你是否四舍五入到最接近的5美分,因为你的国家已经摆脱了一分钱?这是我们可以遵循预期结果的唯一逻辑。

@Entity
@Table(name="B")
public class BEntity implements FieldHandled{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToOne(mappedBy = "b", cascade = CascadeType.ALL, optional = true, 
    fetch = FetchType.LAZY)
    private AEntity a;
    ...

    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false)
    protected Date someDate;

    public AEntity getA() {
        if (fieldHandler != null) {
            return (AEntity) fieldHandler.readObject(this, "a", a);
        }
        return notificacion;
    }

    public void setA(AEntity a) {
        if (fieldHandler != null) {
            this.a = (AEntity) fieldHandler.writeObject(this, "a", this.a,
                        a);
            return;
        }
        this.a = a;
    }

}

答案 1 :(得分:0)

假设您要在小数点后100位舍入到最接近的5美分或近5。

INSERT INTO #TEMP ( Price )
VALUES ( 119.99 )
        , ( 48.99 )

SELECT
    ID
    , Price
    , Price * 1.08 - 0.05
    , CASE WHEN Price > 10 THEN CONVERT( DECIMAL(7,2), round((Price * 1.08 - 0.05)*20,0)/20) END AS RRP
FROM #Temp

样本:http://rextester.com/QIM12944