mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
@@ -228,21 +228,13 @@ void fmt_PrintNumber(char *buf, size_t bufLen, struct FormatSpec const *fmt, uin
|
||||
/* Default fractional width (C's is 6 for "%f"; here 5 is enough) */
|
||||
size_t fracWidth = fmt->hasFrac ? fmt->fracWidth : 5;
|
||||
|
||||
if (fracWidth) {
|
||||
if (fracWidth > 255) {
|
||||
error("Fractional width %zu too long, limiting to 255\n",
|
||||
fracWidth);
|
||||
fracWidth = 255;
|
||||
}
|
||||
|
||||
char spec[16]; /* Max "%" + 5-char PRIu32 + ".%0255.f" + terminator */
|
||||
|
||||
snprintf(spec, sizeof(spec), "%%" PRIu32 ".%%0%zu.f", fracWidth);
|
||||
snprintf(valueBuf, sizeof(valueBuf), spec, value >> 16,
|
||||
(value % 65536) / 65536.0 * pow(10, fracWidth) + 0.5);
|
||||
} else {
|
||||
snprintf(valueBuf, sizeof(valueBuf), "%" PRIu32, value >> 16);
|
||||
if (fracWidth > 255) {
|
||||
error("Fractional width %zu too long, limiting to 255\n",
|
||||
fracWidth);
|
||||
fracWidth = 255;
|
||||
}
|
||||
|
||||
snprintf(valueBuf, sizeof(valueBuf), "%.*f", (int)fracWidth, value / 65536.0);
|
||||
} else {
|
||||
char const *spec = fmt->type == 'd' ? "%" PRId32
|
||||
: fmt->type == 'u' ? "%" PRIu32
|
||||
|
||||
@@ -9,3 +9,6 @@ pr = 16.12
|
||||
|
||||
fl = 6.283185
|
||||
println "`6.283185`: {.6f:fl} -> ${08x:fl}"
|
||||
|
||||
fr = MUL(20.0, 0.32)
|
||||
println "32% of 20 = {f:fr} (~{.2f:fr}) (~~{.0f:fr})"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
`3.1`: 3.100007 -> $0003199a
|
||||
`3.1`: 3.100006 -> $0003199a
|
||||
`5.2`: 5.199997 -> $00053333
|
||||
`MUL`: 16.120026 -> $00101eba
|
||||
`16.12`: 16.119996 -> $00101eb8
|
||||
`16.12`: 16.119995 -> $00101eb8
|
||||
`6.283185`: 6.283188 -> $0006487f
|
||||
32% of 20 = 6.40015 (~6.40) (~~6)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
< 300 > <+00300> < 12c> < %100101100>
|
||||
<4294967254> <-42> <&000037777777726>
|
||||
<3.14159> <-00123> <-123.0455932618>
|
||||
<3.14159> <-00123> <-123.0455932617>
|
||||
<hello > < hello>
|
||||
<300 >
|
||||
|
||||
Reference in New Issue
Block a user