ExifTool中GPS坐标固定宽度printf格式配置问题求助
看起来你在使用ExifTool的-coordFormat参数时踩了一个常见的格式字符串陷阱——错误地将秒的整数部分和小数部分拆分成了两个独立的占位符,这直接导致了虚假零和错误小数的问题。
问题根源分析
你原来的格式字符串是:
-coordFormat "%03d°%02d′%0d%02.5f″"
这里的%0d和%02.5f是两个独立的占位符,ExifTool会分别把秒的整数部分和小数部分填充进去。比如默认格式里的28.39秒,整数部分是28,小数部分是0.39,但拆分后格式拼接逻辑出错,就出现了你看到的280.00000这种诡异结果——本质是把两个数值段错误地连在了一起,而非合并成一个完整的秒数。
正确的逻辑是:秒是一个完整的浮点数,不需要拆分整数和小数部分,应该用一个浮点数格式占位符来处理整个秒值。
正确的格式字符串写法
把秒的格式合并成一个浮点数占位符,比如你想要固定宽度(包含小数点和小数部分)的话,使用%08.5f就可以控制总宽度为8,其中5位小数。完整的格式字符串应该是:
-coordFormat "%03d°%02d′%08.5f″"
这样ExifTool会把整个秒值(比如28.39)直接格式化为028.39000,既保证了固定宽度,又不会出现虚假零,小数部分也能正确显示。
验证示例
针对你提供的默认坐标42 deg 37' 28.39" N, 2 deg 5' 51.96" W,使用正确的格式字符串后,输出会是:
042°37′028.39000″ N, 002°05′051.96000″ W
如果你不需要秒的整数部分前导零(比如想要28.39000而非028.39000),可以把格式改成%8.5f(去掉前面的0),这样输出会变成:
042°37′ 28.39000″ N, 002°05′ 51.96000″ W
(注意这里会有一个空格,因为总宽度是8,整数部分不足时会用空格填充;如果要完全去掉空格且不要求固定宽度,直接用%.5f即可)
关于你提到的“速查表”
你说的速查表内容是对的,%0X.Yf中的X确实是包含小数点和小数部分的总宽度,但之前的错误是因为你拆分了秒的数值,导致格式规则无法正常生效。只要把秒作为一个整体处理,就能符合速查表的预期。
内容的提问来源于stack exchange,提问作者WGroleau

