| ... | @@ -239,19 +239,25 @@ pub fn formatBuf(buf: []const u8, width: usize, | ... | @@ -239,19 +239,25 @@ pub fn formatBuf(buf: []const u8, width: usize, |
| 239 | pub fn formatFloat(value: var, context: var, output: fn(@typeOf(context), []const u8)->bool) -> bool { | 239 | pub fn formatFloat(value: var, context: var, output: fn(@typeOf(context), []const u8)->bool) -> bool { |
| 240 | var buffer: [20]u8 = undefined; | 240 | var buffer: [20]u8 = undefined; |
| 241 | const float_decimal = errol3(f64(value), buffer[0..]); | 241 | const float_decimal = errol3(f64(value), buffer[0..]); |
| 242 | if (!output(context, float_decimal.digits[0..1])) | 242 | if (float_decimal.exp != 0) { |
| 243 | return false; | 243 | if (!output(context, float_decimal.digits[0..1])) |
| | 244 | return false; |
| | 245 | } else { |
| | 246 | if (!output(context, "0")) |
| | 247 | return false; |
| | 248 | } |
| 244 | if (!output(context, ".")) | 249 | if (!output(context, ".")) |
| 245 | return false; | 250 | return false; |
| 246 | if (float_decimal.digits.len > 1) { | 251 | if (float_decimal.digits.len > 1) { |
| 247 | if (!output(context, float_decimal.digits[1 .. math.min(usize(7), float_decimal.digits.len)])) | 252 | const start = if (float_decimal.exp == 0) usize(0) else usize(1); |
| | 253 | if (!output(context, float_decimal.digits[start .. math.min(usize(7), float_decimal.digits.len)])) |
| 248 | return false; | 254 | return false; |
| 249 | } else { | 255 | } else { |
| 250 | if (!output(context, "0")) | 256 | if (!output(context, "0")) |
| 251 | return false; | 257 | return false; |
| 252 | } | 258 | } |
| 253 | | 259 | |
| 254 | if (float_decimal.exp != 1) { | 260 | if (float_decimal.exp != 1 and float_decimal.exp != 0) { |
| 255 | if (!output(context, "e")) | 261 | if (!output(context, "e")) |
| 256 | return false; | 262 | return false; |
| 257 | if (!formatInt(float_decimal.exp, 10, false, 0, context, output)) | 263 | if (!formatInt(float_decimal.exp, 10, false, 0, context, output)) |