用不同的数字类型划分

时间:2018-02-25 23:09:33

标签: sql-server teradata

我试图通过使用子查询中的两个变量来计算一个比率,我希望我的结果在小数点后面有三个值。

变量:

调用 - 类型(整数)

box - type(float)

       ROUND((calls / boxes) * 100.0, 3) Call_Rate

只返回两个小数点

当我使用

    (CAST(calls AS DECIMAL(10,3)) / (boxes AS DECIMAL(10,3)) * 100.0 Call_Rate

此代码返回小数点后的三位数,但第三位数始终为0,因此它将被舍入。

将两个变量都转换为float时,它也会在十进制后返回2个值。

有没有办法执行此操作使其返回3个小数点。

2 个答案:

答案 0 :(得分:1)

(CAST(calls AS DECIMAL(10,5)) / (boxes AS DECIMAL(10,5)) * 100.0 Call_Rate

当你乘以100时,你将小数点移到右边两个位置,所以在十进制转换中还需要两个位置。

答案 1 :(得分:1)

第一个计算实际上是向三个数字舍入,但您可能从SQL Assistant运行此查询,并且默认精度为两个。您可以在工具>中进行更改选项> Float列显示的小数位数

第二次计算的结果基于Teradata的小数计算规则,请参阅DECIMAL Result Data Type

简而言之:首先乘以,然后除

100 * CAST(calls AS DECIMAL(10,3)) / CAST(boxes AS DECIMAL(10,3)) AS Call_Rate

或者保留Float并进行最终演员:

cast( 100 * calls / boxes as decimal(10,3))