float to integer conditionally
I need to check if a float value is actually an integer. If so, I use the value as integer, otherwise as float.
How to implement it? I realized that I don't know a standard function (neither in C, neither in Java and other languages). Fortunately, traces of education helped me to formulate a search query for Google and find the constants required.
The code fragment:
//
// Convert to a number
//
// from http://pigale.sourceforge.net/doc/Tbase_8h-source.html
// minimal double such that DBL_EPSILON + 1. != 1.
#ifndef DBL_EPSILON
#define DBL_EPSILON 2.22044604925031300e-016
#endif
if (XPATH_NUMBER == xobj->type) {
double val = xobj->floatval;
if ((0 == xmlXPathIsInf(val)) && (! xmlXPathIsNaN(val))) {
int ival = (int)val;
if (fabs(val - ival) < DBL_EPSILON) {
return gh_int2scm(ival);
} else {
return gh_double2scm(val);
}
}
}
I'm ready for suggestions on a better variant.
Categories: