Code archives/Miscellaneous/Format$ (number,digits [,places])
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Will return number string right aligned with spaces on the decimal point which is optional. A number too big for field will return asterisks. Number is rounded as required. Version 1.1 which corrects an unnecessary use of fuziness correction, but more work is probably needed :) Version 1.2 Fixed an error or two. Version 1.3 Check for overflow. A bmax version added. | |||||
SeedRnd MilliSecs()
For c=1 To 20
x#=Rnd(-100000000,100000000)/Rnd(1000)
Print "Formatted: "+format$(x,6,4)+ " Unformatted: "+x#
Next
waitkey()
Function format$(v#,d,p=0) ; format a number
Local m$, e$, r$, n, x#=Abs(v)
If p>0 Then m$=Int((x-Floor(x))*10^p) : e$="."+Right$("000000"+m$,p)
If p=0 Or Len(m$)>p Then n=Int(x) Else n=Floor(x)
If v<0 Then r$="-"+n Else r$=n
If Len(r$)>d or n<0 Then r$=String$("*",d): If p>0 Then e$="."+String$("*",p)
Return RSet$(r$,d)+e$
End Function
'---------Bmax version of function -----------------
Function format$(v!,d,p) ' bmax format a number
Local m$, e$, r$, n:Long, x!=Abs(v)
If p>0 Then m$=Long((x-Floor(x))*10^p+0.5!) ; e$="."+Right$("000000000000000000"+m$,p)
If p=0 Or Len(m$)>p Then n=Long(x+0.5!) Else n=Long(x)
If v<0 Then r$="-"+n Else r$=n
If Len(r$)>d Or n<0 Then
r$=left$("*******************",d)
If p>0 Then e$="."+left$("*******************",p)
Endif
Return RSet$(r$,d)+e$
End Function |
Comments
| ||
| I caught this thing making a solitary mistake - 1 number's post decimal place value was 1 digit short for some reason- unfortunately, I cannot remember the number to reproduce the error. It must be a RARE quirk. |
Code Archives Forum