【发布时间】:2012-06-09 20:58:01
【问题描述】:
假设我想在 MATLAB 中将数字 0.011124325465476454 转换为字符串。
如果我打了
mat2str(0.011124325465476454,100)
我得到0.011124325465476453,它的最后一位数字不同。
如果我点击num2str(0.011124325465476454,'%5.25f')
我收到0.0111243254654764530000000
用不需要的零填充,并且在最后一位不同(3 应该是 4)。
我需要一种方法将具有随机小数位数的数字转换为它们的精确字符串匹配项(不填充零,不修改最终数字)。
有没有办法?
编辑:由于我没有记住 Amro 和 nrz 提供的有关精度的信息,所以我添加了有关该问题的更多附加信息。我实际需要转换的数字来自将它们输出到 txt 文件的 C++ 程序,它们都是 C++ double 类型。 [注意:将数字从 txt 文件输入到 MATLAB 的部分不是由我编码的,实际上我不允许修改它以将数字保留为字符串而不将它们转换为数字。我只能访问此代码的“输出”,这是我要转换的数字]。到目前为止,我还没有得到超过 17 位小数的数字(注意:因此上面提供的带有 18 位小数的示例并不是很有指示性)。
现在,如果数字有 15 位,例如 0.280783055069002
然后num2str(0.280783055069002,'%5.17f') 或mat2str(0.280783055069002,17) 返回
0.28078305506900197
这不是确切的数字(见最后一位)。
但如果我点击 mat2str(0.280783055069002,15) 我会得到
0.280783055069002 正确!!!
可能有一百万种方法可以“围绕”问题“编写代码”(例如,创建一个进行转换的例程),但是当我输入一个数字时,没有什么方法可以使用标准的内置 MATLAB 获得理想的结果随机小数位数(但不超过 17);
【问题讨论】:
标签: string matlab floating-point number-formatting