The landed costs button_validate() method attempts to create a correction in quant cost that occurs due to currency rounding. However this can lead to a negative cost value being assigned to a stock.quant

The issue affects move lines with a very low price to quantity ratio. ie 1000 x $0.10
Applying a landed cost of $456.70 to this line gives a diff of $0.4567
Having a 2 decimal rounding on the currency makes diff_rounded = $0.46

Now the formula used to determine the cost correction (diff_correct) on the single qty quant (quant_correct)
```python
diff_correct += (line.quantity * diff) - (line.quantity * diff_rounded)
```
This equates to diff_correct = 0.46 + (1000 * 0.4567) - (1000 * 0.46) = -2.84

and then
```python
if quant_correct:
    quant_dict[quant_correct] = quant_correct.cost + diff_correct
for quant, value in quant_dict.items():
    quant.sudo().write({'cost': value})
```
The correction quant's cost becomes $-2.74

If this quant is then in an inventory adjustment, the accounting lines generated violate a constraint on the journal that (credit + debit) >= (0)

I would suggest that the solution is that this line should be changed to only ever round down
```python
diff_rounded = tools.float_round(diff, precision_rounding=curr_rounding)
```
If rounded down in this case, diff_rounded = 0.45  and diff_correct would be calculated as $7.15 and quant.cost = $7.25
A disproportionately large cost for a $0.10 product, but at least it's positive.

Perhaps a rounding_method='DOWN' should be implemented in tools.float_utils ?
raise UserError(_("The found valuation amount for product %s is zero. Which means there is probably a configuration error. Check the costing method and the standard price") % (self.product_id.name,))
            return []
        credit_value = debit_value
        if self.product_id.cost_method == 'average' and self.company_id.anglo_saxon_accounting:
            # in case 
            # account 
            # booked i
            if self.location_dest_id.usage == 'supplier' and self.origin_returned_move_id and self.origin_returned_move_id.purchase_line_id:
                debit_value = self.origin_returned_move_id.price_unit * qty
            # in case 
            # is made 
            if self.location_id.usage == 'customer' and self.origin_returned_move_id:
                debit_value = self.origin_returned_move_id.price_unit * qty
                credit_value = debit_value
        partner_id = (self.picking_id.partner_id and self.env['res.partner']._find_accounting_partner(self.picking_id.partner_id).id) or False
        debit_line_vals = {
            'name': self.name,
            'product_id': self.product_id.id,
            'quantity': qty,
            'product_uom_id': self.product_id.uom_id.id,
            'ref': self.picking_id.name,
            'partner_id': partner_id,
            'debit': debit_value,
            'credit': 0,
            'account_id': debit_account_id,
        }
        credit_line_vals = {
            'name': self.name,
            'product_id': self.product_id.id,
            'quantity': qty,