1

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

例如,一个值作为“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

所以我的问题是,有没有办法将单曲转换为双曲,就像它显示为单曲一样(即截断所有近似值的小数?注意:我不能只四舍五入,因为我不知道有多少小数它应该有。

4

2 回答 2

0

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

vpa(price, num_of_digits_required)

或者在你的情况下:

vpa(double(price),7)

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

编辑

要使用 vpa,您需要 Symbolic Math Toolbox,网上有其他替代品,例如这个 FEX 文件

于 2012-10-18T22:50:31.403 回答
0

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

于 2012-10-18T23:00:37.613 回答