带有十进制数的node.js数字和knex中的舍入

在我的postgres表中,我有一个numeric (30,16)types的字段numeric (30,16) ,其中存储了许多小数的数字。 我需要计算这些数字。

我使用knex ,默认情况下,它返回这些值作为String所以为了有号码,我试过了:

 var types = require('pg').types types.setTypeParser(1700, 'text', parseFloat); 

然而,这仍然是行不通的,例如从488.1456218300001000和我减去300我可以得到类似于188.1456218300001500

我需要做什么在node.js正确处理操作没有任何舍入错误?

您遇到的问题与knex或Postgres无关,只是JavaScript数字的工作原理 – 它们的精度不足以处理十进制数字。

你可以在这个相关的SO问题上find更多的信息。

正如评论中所build议的那样,如果您真的需要更高的精度,您可以使用big.js这样的库。

你可以在这个小提琴中看到它是如何工作的,看看这个代码示例:

 const Big = require('big.js'); const a = 400.12345678901234567890; console.log(a - 300); // 100.12345678901232 :-( const b = new Big('400.12345678901234567890'); console.log(b.minus(300).toString()); // 100.1234567890123456789 :-) 
Interesting Posts