Exemple #1
0
int testDecDouble()
{
    int i;
    decDouble a, b;
    decContext set;
    char string[DECDOUBLE_String];

    decContextDefault(&set, DEC_INIT_DECDOUBLE); // initialize

    decDoubleFromString(&a, "0.13", &set);
    decDoubleFromString(&b, "8.7", &set);

    for (i = 0; i < 10; i++)
        decDoubleAdd(&b, &a, &b, &set);    // b += a;

    decDoubleToString(&b, string);

    printf("dec064: 8.7 + 0.13 * 10 => %s\n", string);
    return 0;
}
Exemple #2
0
Datum decimal64_in(PG_FUNCTION_ARGS)
{
        char *s = PG_GETARG_CSTRING(0);
        PGDecimal64 ret;
        DECLARE_DEC_CTXT(DEC_INIT_DECIMAL64);

        decDoubleFromString(&ret, s, &dc);
        DEC_CHK_STATUS(dc, DEC_STATUS_ALL, "invalid decimal64 syntax:%s", s);

        PG_RETURN_DECIMAL64(ret);
}
Exemple #3
0
Datum numeric_decimal64(PG_FUNCTION_ARGS)
{
        char *buf;
        PGDecimal64 ret; 
        DECLARE_DEC_CTXT(DEC_INIT_DECIMAL64);

        buf = DatumGetCString(DirectFunctionCall1(numeric_out, PG_GETARG_DATUM(0)));
        decDoubleFromString(&ret, buf, &dc); 
        DEC_CHK_STATUS(dc, DEC_STATUS_ALL, "invalid decimal64:\"%s\"", buf);
        pfree(buf);
        PG_RETURN_DECIMAL64(ret);
}
Exemple #4
0
Datum int8_decimal64(PG_FUNCTION_ARGS)
{
        int64_t a = PG_GETARG_INT64(0);
        PGDecimal64 ret;
        char s[128];

        DECLARE_DEC_CTXT(DEC_INIT_DECIMAL64);
        sprintf(s, INT64_FORMAT, a); 
        decDoubleFromString(&ret, s, &dc); 
        DEC_CHK_STATUS(dc, DEC_STATUS_ALL, "invalid decimal64 syntax:\"%s\"", s);
        PG_RETURN_DECIMAL64(ret);
}
Exemple #5
0
Datum float8_decimal64(PG_FUNCTION_ARGS)
{
        double d = PG_GETARG_FLOAT8(0);
        PGDecimal64 ret; 
        char s[128];
        DECLARE_DEC_CTXT(DEC_INIT_DECIMAL64);

        sprintf(s, "%.*g", DBL_DIG, d);
        decDoubleFromString(&ret, s, &dc); 
        DEC_CHK_STATUS(dc, DEC_STATUS_ALL, "invalid decimal64 syntax:\"%s\"", s);

        PG_RETURN_DECIMAL64(ret);
}