Sounds like those two columns are storing NULL instead of an actual value.
NULL is a good value to store for "unknown". I can;t make my mind up whether, if I was writing an accounting system, I would force credit_amounts and debit_amounts to always have a value (e.g. "0.0"), or whether I would allow them to be NULL.
I'm not an expert on account, but I'll guess that it is wrong for them BOTH to be NULL ... and maybe it is also impossible for them both to have a value? So on that basis I think NULL is useful as it allows you to detect that neither/both are NULL ... and raise an error to the user.
Whereas if both always contain values, and both are 0.0 what does that tell you? Nothing really ... they could both, wrongly, have "No value" ...
You could still detect that both were <> 0.0 and raise an error for that, but I don't think you could detect "Failed to give either a Credit or a Debit value".
So on balance I can talk myself into allowing NULLs in those columns is GOOD!
However, it does mean that you need to make allowance for when they are NULL in your calculations. If you have to do that often then you could create a VIEW
CREATE VIEW coa_VIEW
... List All Other Columns ...
COALESCE(credit_amounts, 0.0) AS [credit_amounts],
COALESCE(debit_amounts, 0.0) AS [debit_amounts}
and then anytime you want "guaranteed numeric values" from the [coa] table just query the VIEW instead of the underlying table.