// ==================================
void GetStringFromDouble(Char* str, double dblNum, Int16 numFractDigits) {

 double flpIP, zeros, round;
 Int32 remainder, longNumber;
 Int16 i, strLen;
 Char buffer[16];

 str[0] = 0;

 if (dblNum < 0.0D) {
 dblNum = -dblNum;
 StrCat(str,"-");
 }

 zeros = 1.0D;
 for (i = 0; i < numFractDigits; i++) {
 zeros *= 10.0D;
 }
 round = 0.5D / zeros;

 dblNum += round;
 flpIP = (Int32) dblNum;
 dblNum -= flpIP;

 StrIToA(buffer, (Int32) flpIP);
 StrCat(str, buffer);
 strLen = (Int16)StrLen(str);
 StrCat(str, ".");      // put in the decimal point and terminate the string
 str[numFractDigits + strLen + 1] = '\0';
 longNumber = (Int32) (dblNum * zeros);  // fractional part

 for (i = numFractDigits + strLen; i > strLen; i--) {
 remainder = longNumber % 10;  // convert the integer part
 str[i] = (Char) (remainder + 0x30);
 longNumber /= 10;
 }
}
// ==================================
double GetDoubleFromString(Char* s) {
#define DOUBLE_STRING_BUFFER_SIZE 12

 Char   leftstr[DOUBLE_STRING_BUFFER_SIZE],
rightstr[DOUBLE_STRING_BUFFER_SIZE];
 double   leftval, rightval, result;
 Int16   j=0, k=0;
 Boolean   isNegative = false;

 if (*s == '-') {
 isNegative = true;
 s++;
 }
 // strip off LHS of number
 for(j = 0; (s[j] != '\0') && (s[j] != '.') && (j <
DOUBLE_STRING_BUFFER_SIZE); j++) {
 leftstr[j] = s[j];
 }

 if (j == DOUBLE_STRING_BUFFER_SIZE) { // ERROR - RETURN ZERO
 result = 0.0D;
 return result;
 }

 leftstr[j] = '\0'; // done, terminate it

 if (leftstr[0] == ' ') {
 leftstr[0] = '0';
 }

 // strip off RHS of number

 if(s[j] == '.') {
 j++;
 }

 while((s[j] != '\0') && (k < DOUBLE_STRING_BUFFER_SIZE)) {
 rightstr[k++] = s[j++]; // get RHS
 }

 if (k == DOUBLE_STRING_BUFFER_SIZE) { // ERROR - RETURN ZERO
 result = 0.0D;
 return result;
 }

 rightstr[k] = '\0'; // done, terminate it

 // convert the two parts to floating point #s

 leftval = (double)StrAToI(leftstr);

 rightval = (double)StrAToI(rightstr);

 // convert RHS to proper fraction
 for(j = 1;j <= StrLen(rightstr); j++) {
 rightval /= 10.0D;
 }

 // combine and return results

 result = leftval + rightval;

 if (isNegative) result *= -1.0D;

 return result;
}

// ==================================

Alan

-- 
For information on using the PalmSource Developer Forums, or to unsubscribe, 
please see http://www.palmos.com/dev/support/forums/

Reply via email to