【问题标题】:format a number as I want根据需要格式化数字
【发布时间】:2011-12-21 02:00:24
【问题描述】:
我有号码:a = 3.860575156847749e+003;,我会以正常方式显示它。所以我写b = sprintf('%0.1f' a);。如果我打印b,我会得到:3860.6。太棒了。事实上,a 是双精度类型,b 已转换为 char。
我可以做些什么来正确格式化该数字并且仍然有一个数字作为最终结果?
最好的问候
【问题讨论】:
标签:
matlab
floating-point
rounding
precision
number-formatting
【解决方案1】:
嗯,您必须区分数值(存储在计算机内存中的数字)和十进制表示(您在屏幕上看到的字符串/字符数组)。您不能真正对数字强加格式:数字具有可以以不同方式表示为字符串的值(例如1234 = 1.234e3 = 12.34e2 = 0.1234e4 = ...)。
如果要存储精度较低的数字,可以使用round、floor、ceil 来计算精度低于原始数字的数字。
例如。如果您有 a = 3.860575156847749e+003 并且您想要一个只有 5 个有效数字的数字,您可以使用 round 来实现:
a = 3.860575156847749e+003;
p = 0.1; % absolute precision you want
b = p .* round(a./p)
这将产生一个变量b = 3.8606e3,它可以用不同的方式表示,但在第五位数字之后应该包含零(实际上:有时不可避免地会出现非常小的值)。我认为这就是你真正想要的,但请记住,对于计算机,这个数字也等于3.86060000(它只是相同值的另一个字符串表示),所以我想再次强调十进制表示不是通过对数字进行舍入设置,但通过(隐式)调用将双精度转换为字符串的函数,这由sprintf、disp 或可能的其他一些函数发生。