请注意,我正试图纠正这一错误。我在这里做错了吗。我得到一个基于金额的百分比。但当我试图从百分比中得到金额时,它是不正确的。
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)*