about 5 years ago I made a bug report about the format function returning a zero with an exponent, sometime after, one of the FB developers contacted me about it, he wanted me to confirm that a certain format was correct but I am not a format expert, so I wrote a small VB6 program that would take a format string and when you clicked on the format button it would do the formatting, just in case someone wants to use it as a reference you can get the VB Format helper here
here's what it looks like
Rounding numbers
Re: Rounding numbers
See the note in hRound():srvaldez wrote: ↑Mar 25, 2024 19:46 @coderJeff
I tried hhr suggestion and it seems that he is right, however, I don't know if there are cases where the suggested change would cause a problem.
the format function is a complex beast and it seems that it's not finished, I know that it fails the tests with gcc-13.2 and up
Code: Select all
/* remove the fraction of the fraction to be compatible with
VBDOS (ie: 2.55 -> 2.5, not 2.6 as in VB6) */
Take care when comparing PRINT USING and FORMAT results, I think they do not share any code.
Also, in the fbc test-suite, I have found different results depending on target or different versions of toolchains and gcc or between 32-bit and 64-bit, so sometimes the format/print using tests in the test-suite are either disabled or limits are relaxed for match most precise digits.
Identifying the logic and testing near the edges of logic conditions (a daunting task test all logic) will be more productive than testing randomly.
Re: Rounding numbers
hello coderJeff
"Is the logic on line str_format.c:335 related to that?"
I don't know, to me the format function is a mystery and counter intuitive, a function to be avoided
I didn't know that the FB format function was modeled after vbdos, I just tried to rewrite the format helper in vbdos but I was unsuccessful.
<edit>
I just looked up the format specifiers in VBDOS and it only accepts the following
Numeric expressions
# Digit position
- Placed after digit, prints trailing sign for negative numbers
. Decimal point position
, placed left of the decimal point, prints a comma every third digit
$$ Prints leading $
+ Position of number sign
** Fills leading spaces with *
^^^^ Prints exponential format
**$ Combines ** and $$
String expressions
& prints entire string
\ \ Prints first n characters, where n is the number of blanks between slashes + 2
! Prints only the first character of the string
don't know how dates and times are handled in Format$
"Is the logic on line str_format.c:335 related to that?"
I don't know, to me the format function is a mystery and counter intuitive, a function to be avoided
I didn't know that the FB format function was modeled after vbdos, I just tried to rewrite the format helper in vbdos but I was unsuccessful.
<edit>
I just looked up the format specifiers in VBDOS and it only accepts the following
Numeric expressions
# Digit position
- Placed after digit, prints trailing sign for negative numbers
. Decimal point position
, placed left of the decimal point, prints a comma every third digit
$$ Prints leading $
+ Position of number sign
** Fills leading spaces with *
^^^^ Prints exponential format
**$ Combines ** and $$
String expressions
& prints entire string
\ \ Prints first n characters, where n is the number of blanks between slashes + 2
! Prints only the first character of the string
don't know how dates and times are handled in Format$
Last edited by srvaldez on Mar 29, 2024 22:50, edited 2 times in total.
Re: Rounding numbers
Until I seen that comment in the source, I never would have guessed. Proving out FORMAT and PRINT USING is more than I would want to take on right now, otherwise I personally have no objection to changes if the output is more favourable for users.