aboutsummaryrefslogtreecommitdiff
path: root/std/fmt/index.zig
diff options
context:
space:
mode:
authorscurest <scurest@users.noreply.github.com>2017-10-24 14:18:50 -0500
committerscurest <scurest@users.noreply.github.com>2017-10-24 14:18:50 -0500
commit262b7428cfad88de9d328773cc4bae6151b8a030 (patch)
treef3e6e0451b04cbf45f78ae91b295ec0f03ea2cac /std/fmt/index.zig
parent03a0dfbeca4b31d235097c66c9891d825cf73c15 (diff)
downloadzig-262b7428cfad88de9d328773cc4bae6151b8a030.tar.gz
zig-262b7428cfad88de9d328773cc4bae6151b8a030.zip
More corrections to float printing
Testing suggests all f32s are now printed accurately.
Diffstat (limited to 'std/fmt/index.zig')
-rw-r--r--std/fmt/index.zig21
1 files changed, 11 insertions, 10 deletions
diff --git a/std/fmt/index.zig b/std/fmt/index.zig
index 85688b361d..0fece54b4c 100644
--- a/std/fmt/index.zig
+++ b/std/fmt/index.zig
@@ -250,20 +250,17 @@ pub fn formatFloat(value: var, context: var, output: fn(@typeOf(context), []cons
if (math.isNan(x)) {
return output(context, "NaN");
}
+ if (math.signbit(x)) {
+ if (!output(context, "-"))
+ return false;
+ x = -x;
+ }
if (math.isPositiveInf(x)) {
return output(context, "Infinity");
}
- if (math.isNegativeInf(x)) {
- return output(context, "-Infinity");
- }
if (x == 0.0) {
return output(context, "0.0");
}
- if (x < 0.0) {
- if (!output(context, "-"))
- return false;
- x = -x;
- }
var buffer: [32]u8 = undefined;
const float_decimal = errol3(x, buffer[0..]);
@@ -272,8 +269,12 @@ pub fn formatFloat(value: var, context: var, output: fn(@typeOf(context), []cons
if (!output(context, "."))
return false;
if (float_decimal.digits.len > 1) {
- const num_digits = if (@typeOf(value) == f32) { usize(8) } else { usize(17) };
- if (!output(context, float_decimal.digits[1 .. math.min(num_digits, float_decimal.digits.len)]))
+ const num_digits = if (@typeOf(value) == f32) {
+ math.min(usize(9), float_decimal.digits.len)
+ } else {
+ float_decimal.digits.len
+ };
+ if (!output(context, float_decimal.digits[1 .. num_digits]))
return false;
} else {
if (!output(context, "0"))