当精度只是运行时已知值时,如何在字符串中格式化具有精度的数字?

问题描述 投票:0回答:1

我有以下 Zig 片段:

var buffer: [20]u8 = undefined;
const precise_string = std.fmt.bufPrint(&buffer, "{d:.d}", .{ max, precision }) catch unreachable;
std.debug.print("{}", .{precise_string.len});

我收到此错误:

 zig test src/root.zig 
/snap/zig/12539/lib/std/fmt.zig:294:13: error: extraneous trailing character '{'
            @compileError("extraneous trailing character '" ++ unicode.utf8EncodeComptime(ch) ++ "'");
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/snap/zig/12539/lib/std/fmt.zig:155:55: note: called from here
        const placeholder = comptime Placeholder.parse(fmt[fmt_begin..fmt_end].*);
                                     ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~

我知道错误的根源是格式说明符字符串,但我无法弄清楚如何修复它,实际的问题是什么。我预计它将把

max
的值放在字符串的开头,然后在
:.
之后放置精度值。

string-formatting zig
1个回答
1
投票

最终解决了以下带有位置参数的格式说明符

try std.fmt.bufPrint(&buffer, "{[0]d:.[1]}", .{ max, precision })

© www.soinside.com 2019 - 2024. All rights reserved.