Click here to Skip to main content
15,887,998 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
What is the best way to implement a measurement converter in objective-c? Like Googles Converter, did they create an if/switch statement for every unit? I'm sure there is a better and easier way.
Posted

1 solution

I'd use a bunch of look up tables if you just want to do simple conversions
(pcode)

<br />
struct conversionsEasy {<br />
    char leftName[32], rightName[32];<br />
    float leftToRightRatio;<br />
}<br />
<br />
conversionsEasy easy[]={<br />
{"Kilometre", "metre",true, 1000},<br />
{"Foot", "metre", true,0.3048},<br />
...<br />
};<br />


More complicated conversions would require some deferral

<br />
<br />
struct conversionsHard {<br />
    char leftName[32], rightName[32];<br />
    double (*convert)(double, bool leftToRight, double mult);<br />
    double mult;<br />
}<br />
<br />
double temp_CtoK(double in, bool LtoR, double mult)<br />
{<br />
 return LtoR?in+273:in-273;<br />
}<br />
<br />
double temp_CtoF(double in, bool LtoR, double mult)<br />
{<br />
 return LtoR?(in*2)+30:(in-30)/2;<br />
}<br />
<br />
<br />
double metric(double in, bool LtoR, double mult)<br />
{<br />
 return LtoR?in*mult:in/mult;<br />
}<br />
<br />
conversionsHard hard[]={<br />
{"Celsius", "Kelvin", &temp_CtoK, 0},<br />
{"Celsius", "Fahrenheit", &temp_CtoF, 0),<br />
<br />
{"Kilometre", "metre",&metric, 1000},<br />
{"Foot", "metre", &metric,0.3048},<br />
<br />
...<br />
};<br />
<br />
<br />



then your biggest problem is populating the right and left combos
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900