MATLAB的浮点到文本行为&x27;s fprintf()

MATLAB的浮点到文本行为&x27;s fprintf(),matlab,floating-point,decimal,Matlab,Floating Point,Decimal,使用fprintf将浮点转换为十进制表示的文本时,输出是一系列十进制数字(可能以0开头)。 这种表示是如何工作的 >>fprintf('%tu\n',pi) >>1078530011 >>fprintf('%bu\n',pi) >>04614256656552045848 道歉,如果这是非常琐碎的;我在别处找不到答案,部分原因是搜索被各种可用的十进制数据类型所淹没 请注意,%t和%b标志是与C的fprintf()不同的两个标志。根据文档,它分别打

使用
fprintf
将浮点转换为十进制表示的文本时,输出是一系列十进制数字(可能以0开头)。
这种表示是如何工作的

>>fprintf('%tu\n',pi)
>>1078530011
>>fprintf('%bu\n',pi)
>>04614256656552045848
道歉,如果这是非常琐碎的;我在别处找不到答案,部分原因是搜索被各种可用的十进制数据类型所淹没


请注意,%t和%b标志是与C的
fprintf()
不同的两个标志。根据文档,它分别打印浮点或双精度,而不是无符号整数。o、x和u在八进制、十六进制和十进制之间切换。

此表示是数字的二进制,打印为无符号整数

该网站告诉我们,Pi的IEEE 754单精度表示(约3.1415927)是40490FDB十六进制,即1078530011十进制(您看到打印的数字)。
“%bu”
格式说明符的工作原理类似,但输出双精度表示


这些格式说明符的用途是允许您将浮点值的位精确表示形式存储到文本文件中。如果要保证位精确存储,以人类可读形式打印浮点值的替代方法需要非常小心,并且可能存在一些无法精确存储的边缘情况(非规范化值…?)。

如果要将数字打印为十六进制:

>> fprintf('%bx\n', pi)
    400921fb54442d18

>> fprintf('%tx\n', single(pi))
    40490fdb
那么格式化程序
'%bx'
'%tx'
就相当于使用NUM2HEX:

>> num2hex( pi )
    400921fb54442d18

>> num2hex( single(pi) )
    40490fdb
另一种方法是使用以下命令将默认输出格式设置为十六进制:

>> format hex
>> pi
   400921fb54442d18
>> single(pi)
   40490fdb
另一方面,@Loren最近发表了一篇文章: ""
他们试图找出在MATLAB中重新读取时,为了保持数字的完整精度,您需要写入多少个十进制数字。

FPRINTF/SPRINTF与C中的函数具有相同的语法。无论如何,您应该始终检查MATLAB文档:文档说%t和%b与C有两个不同。您不缺少百分号吗(即,它不应该是
'%tu\n'
而不是
'tu\n'
)吗?