MATLAB处理近似 - 单打双打

时间:2012-10-18 22:37:39

标签: sql sql-server matlab floating-point

我将财务数据从SQL中提取到Matlab中,不幸的是,它存储为“Real”(这是一种近似数据类型)。

例如,一个值作为“96.194”加载到SQL中,这是正确的值(这可能有任意数量的小数1-5)。我在SQL中知道它存储为类似于96.19400024的东西,因为它是近似值,但SQL Server不知何故知道将其显示为96.194。

当我将它拉入matlab时,它会被拉入96.194,这就是我想要的。不幸的是,事实证明它不是实际上 96.194,正如所示:

>>price
price =
           96.194

>> price==96.194
ans =
     0

>> class(price)
ans =
single

>> double(price)
ans =
          96.1940002441406

所以我的问题是,有没有办法将单个转换为双精确,因为它看起来像一个单独的(即截断所有小数,这是近似?注意:我不能只围绕它,因为我不知道它应该有多少小数。

2 个答案:

答案 0 :(得分:0)

vpa函数允许您指定一些与当前数字设置不同的有效(非零)数字。例如:

vpa(price, num_of_digits_required)

或在你的情况下:

vpa(double(price),7)

(6或8位有效数字将产生相同的结果)

修改

要使用vpa,您需要使用符号数学工具箱,网上还有其他选项,例如this FEX file

答案 1 :(得分:0)

单精度浮点值只有大约7位精度(23位小数分量,log10(2 ^ 24)≈7.225十进制数字)所以你可以舍入除7个最高位数之外的所有数字。