Ejemplo n.º 1
0
static fs_value cast_decimal(fs_value a)
{
    if (a.valid & fs_valid_bit(FS_V_DE)) {
	return a;
    }
    if (a.valid & fs_valid_bit(FS_V_FP)) {
	a.valid |= fs_valid_bit(FS_V_DE);
        fs_decimal_init_from_double(&a.de, a.fp);

	return a;
    }
    if (a.valid & fs_valid_bit(FS_V_IN)) {
	a.valid |= fs_valid_bit(FS_V_DE);
        fs_decimal_init_from_int64(&a.de, a.in);

	return a;
    }
    if (a.lex && strlen(a.lex)) {
	a.valid |= fs_valid_bit(FS_V_DE);
        if (!fs_decimal_init_from_str(&a.de, a.lex)) {
            return a;
        }
    }

    return fs_value_error(FS_ERROR_INVALID_TYPE, "bad cast to decimal");
}
Ejemplo n.º 2
0
int fs_decimal_init_from_double(fs_decimal *d, double v)
{
    char tmp[256];

    snprintf(tmp, 255, "%20.20f", v);

    return fs_decimal_init_from_str(d, tmp);
}
Ejemplo n.º 3
0
fs_value fs_value_decimal_from_string(const char *s)
{
    fs_value v = fs_value_blank();

    int ret = fs_decimal_init_from_str(&v.de, s);
    if (ret) {
	return fs_value_error(FS_ERROR_INVALID_TYPE, "cannot convert value to decimal");
    }

    v.attr = fs_c.xsd_decimal;
    v.valid = fs_valid_bit(FS_V_DE);

    return v;
}