BAD*_*EED 2 floating-point precision matlab rounding number-formatting
我有这个号码:a = 3.860575156847749e+003;
我会以正常方式展示它.所以我写b = sprintf('%0.1f' a);
.如果我打印,b
我会得到:3860.6
.太棒了.事实上,虽然a
是双重类型,b
已经转换为char.
我该怎么做才能正确格式化这个数字并且仍然有一个数字作为最终结果?
最好的祝福
那么,您必须区分数值(存储在计算机内存中的数字)和十进制表示(您在屏幕上看到的字符串/字符数组).您无法在数字上强加格式:数字的值可以用不同的方式表示为字符串(例如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)
Run Code Online (Sandbox Code Playgroud)
这将产生一个b = 3.8606e3
可以用不同方式表示的变量,但在第五个数字后应该包含零(实际上:非常小的值有时是不可避免的).我认为这是你真正想要的,但请记住,对于计算机来说,这个数字也是相同的3.86060000
(它只是同一个值的另一个字符串表示),所以我想再次强调十进制表示不是通过舍入来设置的的数量,但由(隐式地)调用,双转换为字符串,这恰好或者通过一个函数sprintf
,disp
或可能的一些其它功能.