简体   繁体   English

圆形SQL Server

[英]Round SQL Server

how do I evit avoid rounding in SQL Server 我如何避免在SQL Server中舍入

DECLARE @NUMERO1 AS numeric(26,8) = 0
DECLARE @NUMERO2 AS numeric(26,8) = 0

SET @NUMERO1 = 1.92306964
SET @NUMERO2 = 105
SELECT 1.92306964 * @NUMERO2
SELECT @NUMERO1* @NUMERO2 

Is not the same result. 结果不一样。

Thanks 谢谢

If you want better precision, use FLOAT rather than NUMERIC/DECIMAL types. 如果要提高精度,请使用FLOAT而不是NUMERIC / DECIMAL类型。 Try the following instead: 请尝试以下操作:

DECLARE @NUMERO1 AS FLOAT = 1.92306964
DECLARE @NUMERO2 AS FLOAT = 105
SELECT 1.92306964 * @NUMERO2 -- 201.9223122
SELECT @NUMERO1 * @NUMERO2  -- 201.9223122

When you hard code a number like that in SSMS it gets treated as a float, not numeric, which behaves differently. 当您在SSMS中对数字进行硬编码时,它会被视为浮点数,而不是数字,其行为会有所不同。 To make the output of your two select statements match, you would need to write something like this: 为了使两个选择语句的输出匹配,您需要编写如下内容:

DECLARE @NUMERO1 AS numeric(26,8) = 0
DECLARE @NUMERO2 AS numeric(26,8) = 0

SET @NUMERO1 = 1.92306964
SET @NUMERO2 = 105
SELECT cast(1.92306964 as numeric(26,8)) * @NUMERO2
SELECT @NUMERO1* @NUMERO2

However, I assume you want the greater precision of float that will let you work backwards like such: 但是,我假设您想要更高的浮点精度,以便让您像这样反向运行:

DECLARE @NUMERO1 AS float = 0
DECLARE @NUMERO2 AS float = 0

SET @NUMERO1 = 1.92306964
SET @NUMERO2 = 105
SELECT 1.92306964 * @NUMERO2
SELECT @NUMERO1 * @NUMERO2 
SELECT (1.92306964 * @NUMERO2) / 1.92306964 -- returns @NUMERO2 as expected
SELECT (@NUMERO1 * @NUMERO2) / @NUMERO1 -- returns @NUMERO2 as expected

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

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