How do I format text output to screen...

Blitz3D Forums/Blitz3D Beginners Area/How do I format text output to screen...

hollifd(Posted 2016) [#1]
In Blitz3D, When outputting text to the screen, how do I format my numbers to be a fixed number of places after the decimal?

Something like:

Function FormatIt$(Number#, PlacesAfterDecimal%)

NewNumber$ = Str(Number#)

Found% = Instr(NewNumber$, ".")
If Found% > 0 Then
	CurrentPlaces% = Len(Str(NewNumber$)) - Found%
	While CurrentPlaces% < PlacesAfterDecimal%
		NewNumber$ = NewNumber$ + "0"
	Wend
End If

Return NewNumber$

End Function



hollifd(Posted 2016) [#2]
Nevermind...This might be a stupid way to do it but it seems to work...

Function FormatIt$(Number#, PlacesAfterDecimal#)

NewNumber$ = Str(Number#)
For I = 1 To PlacesAfterDecimal#
	NewNumber$ = NewNumber$ + "0"
Next


Found# = Instr(NewNumber$, ".")
If Found# > 0 Then
	CurrentPlaces# = Len(Str(NewNumber$)) - Found#
	While CurrentPlaces# < PlacesAfterDecimal#
		NewNumber$ = NewNumber$ + "0"
	Wend
	If CurrentPlaces# > PlacesAfterDecimal# Then
		NewNumber$ = Mid(NewNumber$, 1, Len(NewNumber$) - (CurrentPlaces# - PlacesAfterDecimal#))
	End If	
End If

Return NewNumber$

End Function



_PJ_(Posted 2016) [#3]
Not sure if this is helpful or relevant, but at the least it demonstrates the use of String$() command to repeat a number of '0' in a string:

Function s_STRING_ShortFraction$(f_Fract#,m_DecimalPlaces%=2)
	If (f_Fract=Int(f_Fract))
		Return Str(Floor(f_Fract)+String("0",m_DecimalPlaces-1))
	End If	
	
	Local s_Return$=Str(f_Fract)
	Local m_Decimal=Instr(s_Return,".")
	If (Not(m_Decimal))
		;This should never actually occur, all Float# Must have decimal point
		Return s_Return+String("0",m_DecimalPlaces)
	End If
	Local m_Count=Len(s_Return)
	Local m_CurrentDecimalPlaces=(m_Count-(m_Decimal))
	If (m_DecimalPlaces<m_CurrentDecimalPlaces)
		s_Return=Left(s_Return,m_Decimal+m_DecimalPlaces)
	Else
		If (m_DecimalPlaces>m_CurrentDecimalPlaces)
			s_Return=s_Return+String("0",m_DecimalPlaces-m_CurrentDecimalPlaces)
		End If
	End If
	Return s_Return
End Function



Midimaster(Posted 2016) [#4]
Print FormatIt(1.5,3)
Print FormatIt(2.5456,3)
Print FormatIt(3.0,3)
Print FormatIt(4,3)
Print FormatIt(512.04,3)

Function FormatIt$(Number#, PlacesAfterDecimal%)
	NewNumber$ = Str(Number#)
	NewNumber=NewNumber +"0000000000"
	Found% = Instr(NewNumber$, ".")
	NewNumber=Left(NewNumber, Found + PlacesAfterDecimal)
	Return NewNumber$
End Function