une solution serait de conserver des strings en mémoire 
et de ne pas les convertir en float pour les calculs
mais d'effectuer les calculs 'a la main ' de la même façon qu'a l'école ^^
voila un début de solution addition et multiplications ne geres pas les nombres negatifs 
 
Code : Tout sélectionner
Declare.s multiply(st1$,st2$)
Declare.s addition(st1$,st2$)
Declare.s soustraction(st1$,st2$)
Debug multiply("20.5","35.0")
Debug addition("20.2","35.58")
Procedure.s multiply(st1$,st2$)
	V1=Len(st1$)-FindString(st1$,".",1) ; nombre de decimales
	V2=Len(st2$)-FindString(st2$,".",1) ; nombre de decimale
	If v1=Len(st1$):v1=0:EndIf
	If v2=Len(st2$):v2=0:EndIf
	st1$=RemoveString(st1$,".")
	st2$=RemoveString(st2$,".")
	;multiplication
	result$=Str(Val(st1$)*Val(st2$))
	result$=(Left(result$,Len(result$)-(V1+V2))+"."+Right(result$,(v1+v2)))	
	ProcedureReturn result$
EndProcedure
Procedure.s addition(st1$,st2$)
	V1=Len(st1$)-FindString(st1$,".",1) ; nombre de decimales
	V2=Len(st2$)-FindString(st2$,".",1) ; nombre de decimale
	;
	If v1=Len(st1$):v1=0:EndIf
	If v2=Len(st2$):v2=0:EndIf
	If v2<>V1
		If v1>V2
			If v2=0 ; pas de virgule
				st2$=st2$+"."+Space(V1-v2)
			Else
				st2$=st2$+"."+Space(V1-v2)
			EndIf
		EndIf
		If v2>v1
			If v1=0 ; pas de virgule
				st1$=st1$+Space(V2-v1)
			Else
				st1$=st1$+Space(V2-v1)
			EndIf
		EndIf
	EndIf
	If Len(st1$)>Len(st2$)
		st2$=Space(Len(st1$)-Len(st2$))+st2$
	EndIf
	If Len(st2$)>Len(st1$)
		st1$=Space(Len(st2$)-Len(st1$))+st1$
	EndIf
	ret=0
	For a=Len(st1$) To 1 Step -1
		If Mid(st1$,a,1)<>"."
			ad=Val(Mid(st1$,a,1))+Val(Mid(st2$,a,1))
			If ad>10
				ad=ad-10
				ret=1
			Else
				ret=0	
			EndIf
			result$=Str(ad)+result$
		Else
			result$="."+result$
		EndIf
	Next
	
If v2=0 And v1=0 ; pas de virgule on enleve les zero au debut
	result$=ReplaceString(LTrim(ReplaceString(result$,"0"," "))," ","0")
Else ; on enleve les zero des deux cotes
	result$=ReplaceString(LTrim(RTrim(ReplaceString(result$,"0"," ")))," ","0")
EndIf
	ProcedureReturn result$
EndProcedure
bon courage pour tout implémenter personnellement je ne pense pas aller plus loin pour l'instant.
edit :correction de bug le code enlevait les zero en debut et fin de resultat meme si il n'y avais pas de virgule
050 devenais 5 au lieu de 50