| ... | @@ -560,13 +560,25 @@ fn formatFloatValue( | ... | @@ -560,13 +560,25 @@ fn formatFloatValue( |
| 560 | options: FormatOptions, | 560 | options: FormatOptions, |
| 561 | writer: anytype, | 561 | writer: anytype, |
| 562 | ) !void { | 562 | ) !void { |
| | 563 | // this buffer should be enough to display all decimal places of a decimal f64 number. |
| | 564 | var buf: [512]u8 = undefined; |
| | 565 | var buf_stream = std.io.fixedBufferStream(&buf); |
| | 566 | |
| 563 | if (fmt.len == 0 or comptime std.mem.eql(u8, fmt, "e")) { | 567 | if (fmt.len == 0 or comptime std.mem.eql(u8, fmt, "e")) { |
| 564 | return formatFloatScientific(value, options, writer); | 568 | formatFloatScientific(value, options, buf_stream.writer()) catch |err| switch (err) { |
| | 569 | error.NoSpaceLeft => unreachable, |
| | 570 | else => |e| return e, |
| | 571 | }; |
| 565 | } else if (comptime std.mem.eql(u8, fmt, "d")) { | 572 | } else if (comptime std.mem.eql(u8, fmt, "d")) { |
| 566 | return formatFloatDecimal(value, options, writer); | 573 | formatFloatDecimal(value, options, buf_stream.writer()) catch |err| switch (err) { |
| | 574 | error.NoSpaceLeft => unreachable, |
| | 575 | else => |e| return e, |
| | 576 | }; |
| 567 | } else { | 577 | } else { |
| 568 | @compileError("Unknown format string: '" ++ fmt ++ "'"); | 578 | @compileError("Unknown format string: '" ++ fmt ++ "'"); |
| 569 | } | 579 | } |
| | 580 | |
| | 581 | return formatBuf(buf_stream.getWritten(), options, writer); |
| 570 | } | 582 | } |
| 571 | | 583 | |
| 572 | pub fn formatText( | 584 | pub fn formatText( |
| ... | @@ -1791,3 +1803,17 @@ test "padding" { | ... | @@ -1791,3 +1803,17 @@ test "padding" { |
| 1791 | try testFmt("==================Filled", "{:=>24}", .{"Filled"}); | 1803 | try testFmt("==================Filled", "{:=>24}", .{"Filled"}); |
| 1792 | try testFmt(" Centered ", "{:^24}", .{"Centered"}); | 1804 | try testFmt(" Centered ", "{:^24}", .{"Centered"}); |
| 1793 | } | 1805 | } |
| | 1806 | |
| | 1807 | test "decimal float padding" { |
| | 1808 | var number: f32 = 3.1415; |
| | 1809 | try testFmt("left-pad: **3.141\n", "left-pad: {d:*>7.3}\n", .{number}); |
| | 1810 | try testFmt("center-pad: *3.141*\n", "center-pad: {d:*^7.3}\n", .{number}); |
| | 1811 | try testFmt("right-pad: 3.141**\n", "right-pad: {d:*<7.3}\n", .{number}); |
| | 1812 | } |
| | 1813 | |
| | 1814 | test "sci float padding" { |
| | 1815 | var number: f32 = 3.1415; |
| | 1816 | try testFmt("left-pad: **3.141e+00\n", "left-pad: {e:*>11.3}\n", .{number}); |
| | 1817 | try testFmt("center-pad: *3.141e+00*\n", "center-pad: {e:*^11.3}\n", .{number}); |
| | 1818 | try testFmt("right-pad: 3.141e+00**\n", "right-pad: {e:*<11.3}\n", .{number}); |
| | 1819 | } |