SQL Server计算问题



请注意,我正试图纠正这一错误。我在这里做错了吗。我得到一个基于金额的百分比。但当我试图从百分比中得到金额时,它是不正确的。

SELECT (1000 / 1271.11) * 100

我得到78.6713900

但当我相乘时,我得到

SELECT 1271.11 * 0.786713900

我得到999.99990542900,应该是1000

这方面的任何线索。感谢

问题是,除以anything.11需要太多的小数位数才能很容易地反转(您可以看到SELECT 1000.00000000 / 1271.1100000000;会得到一个更接近的数字,但仍然没有雪茄(。使用CEILING(或ROUND(要简单得多:

SELECT CEILING(1271.11 * 0.786713900);

结果:

1000

如果您想返回1000,可以使用函数ROUND()。差异在该点之后的第10位,所以你必须在一个非常专业的应用程序中才能产生任何差异。

<!-- -->
>     declare @var float(38);
>     set @var =(1000.000 / 1271.11);
>     select 1271.11*@var, @var;
>     select round(1271.11*@var,9);
>     select round(1271.11*@var,10);
>     GO
> 
> <pre>
> (No column name) | (No column name)
> ---------------: | ---------------:
> 999.999999999584 |     0.7867139744
> 
> | (No column name) |
> | ---------------: |
> |             1000 |
> 
> | (No column name) |
> | ---------------: |
> |   999.9999999996 |
> </pre>
<!-- -->
>     declare @var decimal(20,10);
>     set @var =(1000.000 / 1271.11);
>     select 1271.11*@var, @var;
>     select round(1271.11*@var,9);
>     select round(1271.11*@var,10);
>     GO
> 
> <pre>
> (No column name) | (No column name)
> ---------------: | ---------------:
> 999.999999999584 |     0.7867139744
> 
> |  (No column name) |
> | ----------------: |
> | 1000.000000000000 |
> 
> | (No column name) |
> | ---------------: |
> | 999.999999999600 |
> </pre>
*db<>fiddle [here](https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=6e1baa4da39f97b8acbf028cdf452039)*

最新更新