Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 根据需要格式化一个数字_Matlab_Floating Point_Rounding_Precision_Number Formatting - Fatal编程技术网

Matlab 根据需要格式化一个数字

Matlab 根据需要格式化一个数字,matlab,floating-point,rounding,precision,number-formatting,Matlab,Floating Point,Rounding,Precision,Number Formatting,我有号码:a=3.860575156847749e+003我会以正常的方式显示它。所以我写b=sprintf(“%0.1f”a)。如果我打印b我将得到:3860.6。这太完美了。事实上,a是双精度类型,b已转换为字符 我怎样才能正确设置该数字的格式,并且仍然有一个数字作为最终结果 以文本变量向sprintf的结果致意。您是否尝试过将变量声明为整数(例如),并将其用作sprintf指令的返回值 这对您很有用:嗯,您必须区分数值(存储在计算机内存中的数字)和十进制表示(屏幕上显示的字符串/字符数组)

我有号码:
a=3.860575156847749e+003我会以正常的方式显示它。所以我写
b=sprintf(“%0.1f”a)。如果我打印
b
我将得到:
3860.6
。这太完美了。事实上,
a
是双精度类型,
b
已转换为字符

我怎样才能正确设置该数字的格式,并且仍然有一个数字作为最终结果


以文本变量向sprintf的结果致意。您是否尝试过将变量声明为整数(例如),并将其用作sprintf指令的返回值


这对您很有用:

嗯,您必须区分数值(存储在计算机内存中的数字)和十进制表示(屏幕上显示的字符串/字符数组)。您不能对数字强制使用格式:数字的值可以用不同的方式表示为字符串(例如,
1234=1.234e3=12.34e2=0.1234e4=…

如果要存储精度较低的数字,可以使用
round
floor
ceil
计算精度低于原始数字的数字。 例如,如果您有
a=3.860575156847749e+003
并且您想要一个只有5位有效数字的数字,您可以使用
四舍五入

a = 3.860575156847749e+003;
p = 0.1; % absolute precision you want
b = p .* round(a./p)
这将产生一个变量
b=3.8606e3
,该变量可以用不同的方式表示,但在第五位之后应包含零(实际上,有时非常小的值是不可避免的)。我想这就是你真正想要的,但请记住,对于计算机来说,这个数字也等于
3.86060000
(它只是相同值的另一个字符串表示形式),因此我想再次强调,十进制表示形式不是通过四舍五入来设置的,而是通过(隐式地)来设置的调用将双精度转换为字符串的函数,该操作可以通过
sprintf
disp
或其他一些函数进行