Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Convert string 1/4 or 1/2 to numeric
Message
From
20/01/2016 08:56:05
Lutz Scheffler
Lutz Scheffler Software Ingenieurbüro
Dresden, Germany
 
 
To
20/01/2016 08:52:37
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
01629854
Message ID:
01629982
Views:
37
>>>>>>There shoud be a way using LOG10() without counting numbers, but I'm to lazy right now. (For the whole part it's INT(log10(ABS(EVL(INT(tnNumber),1))))+1 )
>>>>>
>>>>>Understood!
>>>>>Thank you.
>>>>
>>>>Hi Bill,
>>>>
>>>>I did not found a simple way to calculater the decimal digits wit LOG.
>>>>So the kludge for stuff based 2: (I had some fun with it):
>>>>
>>>>CLEAR
>>>>
>>>>?GetCommonFract_2(1)
>>>>?GetCommonFract_2(0)
>>>>?GetCommonFract_2(13/32)
>>>>?GetCommonFract_2(0.25)
>>>>?GetCommonFract_2(9/16)
>>>>?GetCommonFract_2(31/16)
>>>>?GetCommonFract_2(-15.125)
>>>>
>>>>FUNCTION GetCommonFract_2
>>>> LPARAMETERS;
>>>>  tnNumber
>>>>
>>>> LOCAL;
>>>>  lnWhole,;
>>>>  lnFrac,;
>>>>  lnNominator
>>>>
>>>> llSign      = SIGN(tnNumber)=-1
>>>> tnNumber    = ABS(tnNumber)
>>>> lnWhole     = INT(tnNumber)
>>>> lnFrac      = tnNumber-lnWhole
>>>> lnNominator = 2^(LEN(RTRIM(STR(lnFrac,15,15),"0"))-1)
>>>>
>>>> RETURN IIF(llSign,'-','')+;
>>>>  IIF(EMPTY(lnWhole),IIF(EMPTY(lnFrac),'0',''),LTRIM(STR(lnWhole,15))+' ')+;
>>>>  IIF(EMPTY(lnFrac),'',LTRIM(STR(lnFrac*lnNominator,15))+'/'+LTRIM(STR(lnNominator,15)))
>>>>ENDFUNC &&GetCommonFract_2
>>>>
>>>>
>>>>Edit: added parenthesis on 2^....
>>>
>>>Wouldn't
>>>
lnNominator = 2^(int(LEN(RTRIM(STR(lnFrac,15,15),"0")*log(10)/log(2)))+1)
>>>be more correct? Because for three decimal digits you need two to the power of ten to have your error below 0.001... and 3*log(10)/log(2) is 9.9658, and the +1 there gives you 10.
>>
>>My code is only valid for fractions that have nominators in powers of 2. 1/2; 1/4;/1/8;...
>>So 0.1 is not a valid paramater.
>>Bill only likes to transform those, and for that you only need the number of digits.
>
>Yes.. no 1/6 or 1/14 where the denominator is a multiple of 2 by not a power or 2.
>That would have driven me insane.

In general you can not solve it, since you have no way to store periodic values. :)
Words are given to man to enable him to conceal his true feelings.
Charles Maurice de Talleyrand-Périgord

Weeks of programming can save you hours of planning.

Off

There is no place like [::1]
Previous
Reply
Map
View

Click here to load this message in the networking platform