LabVIEW Format Into File:%d 和 %f 差了 6 个字节

本文是「CLAD 例题精讲 · 第 20 讲」系列之一。第 20 讲的核心问法是:写入之后,文件里到底是什么字符。这道题考的更刁钻一点:同一个数,用不同的格式字符串写进去,文件大小都不一样。

01 题目

NI Daily CLAD 2012-09-03。两个程序框图:都从 Open/Create/Replace File 开始,都往 c:\temp 下写文件,输入的都是同一个浮点数常量 9.99,都用 Format Into File。唯一的区别是格式字符串:上面写的是 %d ,下面写的是 %f。

问:两个文件的大小关系是什么?

  • a) steve1.txt 和 steve2.txt 一样大
  • b) steve1.txt 比 steve2.txt 大
  • c) steve1.txt 比 steve2.txt 小
  • d) 两个文件都因出错而没有被创建

题面:格式字符串一个 %d 一个 %f,输入都是 9.99(NI Daily CLAD 2012-09-03)

02 答案

C。用 %d 写的 steve1.txt 更小。

03 为什么

Format Into File 的本质是:先把数据按格式字符串格式化成文本,再把这段文本写进文件。所以文件的大小,就是格式化结果字符串的长度。

  • %d 把浮点数 9.99 格式化成整数文本:不是截断,是四舍五入 ,9.99 变成 "10"------2 个字符。
  • %f 默认输出 6 位小数:9.99 变成 "9.990000"------8 个字符。

2 个字符对 8 个字符,差 6 个字节。steve1.txt 小,答案 C。

这里有一个很多老手都会愣一下的点:%d 遇到浮点数不是砍掉小数,而是四舍五入。9.99 变 "10",9.49 变 "9"。要是按"截断"去算,9.99 就该变 "9",答案就选反了------这正是出题人把 9.99 而不是 9.4 放进题面的原因。

04 容易栽的坑

坑一:拿数值大小当文件大小。 9.99 比 10 "更精确",直觉上似乎该更长;但文件里存的是格式化后的字符,"10" 就 2 个字节,谁也拦不住。

坑二:以为 %f 固定是 "9.99" 原样输出。 %f 不带精度说明时默认 6 位小数,9.99 会变成 9.990000。想输出 9.99 得自己写 %.2f。

坑三:以为写入的是"数字"。 走 Format Into File 这条路,写进去的从头到尾都是文本。文件里没有数值类型这回事,只有字符。

05 工程里怎么用

日志和报表用 %f,并且显式给精度。 %.3f 输出固定位数的小数,列对齐、好复查;不写精度,默认 6 位既可能太长也可能不够。

要机器再读回来的,别用文本绕一圈。 需要无损往返的数值,用二进制文件写 DBL,8 个字节原样进出,不存在格式化损失;文本格式留给给人看的报表。

算文件大小之前,先把格式化结果在字符串里演一遍。 Format Into String 和 Format Into File 用的是同一套格式字符串,拿前者把结果摆出来看一眼,文件多大就一目了然。

一句话总结:Format Into File 写进去的是字符不是数,%d 四舍五入、%f 默认 6 位小数------文件大小就是那段文本的长度。

相关推荐
LabVIEW开发13 小时前
LabVIEW CompactRIO 编程模式怎么选(系列 02/05)
fpga开发·labview
LabVIEW开发16 小时前
LabVIEW 拆子 VI:9 种框选,4 种能拆
labview
LabVIEW开发1 天前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
LabVIEW开发4 天前
34970A:接 LabVIEW 常踩的 5 个坑
labview·labview知识·labview功能·labview程序
LabVIEW开发4 天前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
LabVIEW开发5 天前
LabVIEW 初学者架构怎么选?跟着痛点升级
labview
LabVIEW开发5 天前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
LabVIEW开发6 天前
LabVIEW 局部变量与数据流:这道 CLAD 题为什么答案是 Undefined
java·开发语言·labview
LabVIEW开发6 天前
Fluke 万用表:接 LabVIEW 常踩的 5 个坑
labview·labview知识·labview功能·labview程序