Sql server为相同的数学计算给出不同的结果

时间:2017-07-26 13:39:59

标签: sql sql-server

步骤1

查询:

import { Http, Response} from '@angular/http'

结果:

SELECT
(ISNULL(TRY_CONVERT(NUMERIC(38, 14), '123456789.34554563453524'), 0) 
 * 
ISNULL(try_convert(NUMERIC(38, 14), '456789876.34556345345353'), 0))/100.0

第二步

以上查询我已修改为:

563938115391720.660302

但结果是:

SELECT (123456789.34554563453524 * 456789876.34556345345353) / 100.0

这里,Step1查询结果在某个时刻截断了小数。

如何重新编写它以获取Step2查询的确切数字( 563938115391720.660302253145411988 )。

1 个答案:

答案 0 :(得分:2)

这与十进制精度的预测完全相同。 见T-SQL Decimal Division Accuracy

Numbers with decimal points are interpreted as NUMERIC in SQL Server to the exact precision shown。不漂浮。在这种情况下decimal (23, 14)

在第一个示例中,它们是decimal (38, 14)

相同精度与显式CONVERT用于相同数据类型时的结果相同

SELECT
(ISNULL(TRY_CONVERT(NUMERIC(23, 14), '123456789.34554563453524'), 0) 
 * 
ISNULL(try_convert(NUMERIC(23, 14), '456789876.34556345345353'), 0))/100.0

563938115391720.660302253145411988

注意,100.0在这种情况下也是decimal(4,1)

最后的单词:this is long division that used to be taught at school经过一些精确的变化,因为乘法中的38/23差异

相关问题