SQL Server round()

时间:2016-05-16 11:11:15

标签: sql sql-server rounding

我想舍入一个选择的值

例如:

width

py4j.java_gateway:Received command c on object id p0的结果是“3.999999999999999”

我想成为“3.99”或“3.9”

4 个答案:

答案 0 :(得分:4)

ROUND(width, 1 or 2, 1)应该最适合您。例如:

SELECT CONVERT(NUMERIC(13,2), ROUND(width, 2, 1))
FROM Home

将返回3.99和

SELECT CONVERT(NUMERIC(13,1), ROUND(width, 1, 1))
FROM Home

将返回3.9

答案 1 :(得分:3)

如果您想要一个3.99或3.9的值,那么您不需要round()。你想要floor()。但是,这适用于整数,但不适用于小数。

cast(width as decimal(10,2))的天真方法将返回4.00round(width, 2)也是如此。一种方法是减去少量。所以:

select cast(width - 0.005 as decimal(10, 2))

应该给你" 3.99"。

答案 2 :(得分:2)

如果你只需要两个十进制值,你可以乘以100,将结果除以100(这是必要的,因为地板只能将一个数字放到一个整数上):

select floor(width * 100) / 100 from Home  

以下是步骤

3.99999999 * 100 = 399.999999    --- Multiply by 100
floor(399.999999) = 399          --- floor 
399 / 100 = 3.99                 --- Divide by 100

也可以使用不同形式的round function with a third parameter

当第三个参数与0不同时,结果将被截断而不是舍入

  

<强>语法

     

ROUND ( numeric_expression , length [ ,function ] )

     

<强>参数

     

numeric_expression是精确数字或表达式   近似数值数据类型类别,位数据类型除外。

     

length是否对numeric_expression进行舍入的精度。   length必须是tinyint,smallint或int类型的表达式。什么时候   length是正数,numeric_expression是舍入到的   长度指定的小数位数。当长度是a   负数,numeric_expression在左侧舍入   小数点,由长度指定。

     

function是什么类型的   执行的操作。 function必须是tinyint,smallint或int。什么时候   函数被省略或者值为0(默认值),numeric_expression   四舍五入。 指定0以外的值时,numeric_expression   被截断。

以下是使用此round版本的选择:

 select round(width, 2, 1) from Home 

答案 3 :(得分:1)

这很简单,如果你想要结果3.9那么

select round(width,1) from Home

如果您需要结果3.99,请使用..

select round(width,2) from Home