繁体   English   中英

Nodejs到MSSQL十进制数字的问题

[英]Nodejs to MSSQL decimal digits issue

我正在使用使用Node.js的回送框架开发的应用程序。 我需要从csv读取数据并将其保存在我的SQL Server数据库中(我正在使用SQL Server 2014实例)。 csv文件的一列包含带有16个十进制数字的数字。 我从csv文件中读取它们没有问题,但是当我将它们保存在数据库中时,它将更改最后一个十进制数字。 例如,csv的第一行的值为“ 0.0059888523696288”,但是在数据库中我找到的是“ 0.0059888525865972”。

我在我的JavaScript代码中做了一个console.log来检查数字并正确打印,所以我猜想问题是在数据库读取数据时发生的。

这是在我的javascript模型中映射的属性的定义:

"forecast": {
      "type": "Number",
      "required": true,
      "length": null,
      "precision": 53,
      "scale": null,
      "mssql": {
        "columnName": "forecast",
        "dataType": "float",
        "dataLength": null,
        "dataPrecision": 53,
        "dataScale": null,
        "nullable": "NO"
      }
    }

我尝试将数据库表中列的定义更改为十进制(18,16),并相应地将模型中的列定义更改为十进制,然后再次执行插入操作,但得到的结果相同。

关于此行为的任何解释以及如何在数据库上获取正确的数字?

编辑:

我按照注释中的建议进行了更多日志记录,这是一个输出示例:

从csv读取的值:0.0045747027551005

存储在另一个js变量中的值:0.0045747027551005

连接器输出:

loopback:connector:mssql SQL:
DECLARE @insertedIds TABLE (id INT)
INSERT INTO [dbo].[PLAN]([plan],[period],[forecast]) OUTPUT INSERTED.[id] into @insertedIds VALUES(@param1,@param2,@param3)
SELECT id AS insertId from @insertedIds
 Parameters: [137,17,0.0045747027551005] +3ms

存储在db上的值:0.0045747025869787

即使将列更改为十进制(28,16),我也得到相同的输出。 这很奇怪。

您正在SQL Server中使用Float数据类型,该数据类型是从-1.79E + 308到1.79E + 308的浮点精度数字数据。因此,它不是精确的。

您应该使用Decimal,它是固定的精度和小数位数值数据类型。

您也可以指定小数位数。

暂无
暂无

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

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