Hi,
I have a problem that happens very rarely. I have a calculation which ads (for example) -15000.00 to 15575.51 and saves the results to an oracle database. However, the reslut in the databse is 575.51000002
Both figures are loaded elsewhere from the database and either have 0 or 2 decimals as in the example above.
The code processes millions of transactions, but less than .01 % has this error. Any ideas?
Thanks,
Shawn
AddUpInputAK(
int iIndexInputAK,
int iAccumPos,
int iAccumNeg,
double* naSumsBW,
double* naSumsRW )
{
[INDENT]int iRet = SQC_C_Success;
int iIndexSum;
double nBetragBook;
double nBetragBest;
double nBetragKto;
double nBetragRef;
int iAK_Vorz;
////
//
////
if ( ALG_IsIntNull( iIndexInputAK ) ) {
[INDENT]goto L_Eof;
[/INDENT]}
if ( ALG_IsIntNull( iAccumPos ) && ALG_IsIntNull( iAccumNeg ) ) {
[INDENT]goto L_Eof;
[/INDENT]}
iIndexSum = 0;
nBetragBook = m_naInpAbrKompBetrag[iIndexInputAK];
if ( ALG_IsDoubleNull( nBetragBook ) ) {
[INDENT]goto L_Eof;
[/INDENT]}
////
// Correct signage
////
iAK_Vorz = 1;
if ( m_saInpAbrKompVorz[iIndexInputAK].Left( 1 ) == "-" ) {
[INDENT]iAK_Vorz = -1;
nBetragBook = nBetragBook * ( -1.0);
[/INDENT]}
if ( m_sPosArt == "KTO" ) {
////
// Accounts
////
if ( m_sKtoWhg == m_saInpAbrKompWhg[iIndexInputAK] ) {
[INDENT]nBetragKto = m_naInpAbrKompBetrag[iIndexInputAK];
[/INDENT]if ( iAK_Vorz < 0 ) {
[INDENT]nBetragKto = nBetragKto * ( -1 );
[/INDENT]} else {
[INDENT]nBetragKto = nBetragBook;
[/INDENT]}
ALG_SetDoubleNull( &nBetragKto );
}
if ( ! ALG_IsDoubleNull( nBetragKto ) ) {
[INDENT]naSumsBW[iIndexSum] = naSumsBW[iIndexSum] + nBetragKto;
[/INDENT]}
}
L_Eof:
return( iRet );
}
[/INDENT]