Skip to content

Rounding issues #101

@zirnipa

Description

@zirnipa

Bug reported by Leonidas D.

mpay24-php / src / Requests / ManualCredit.php

Methode setAmount():

/**
 * @param int $amount
 */
public function setAmount($amount)
{
    $this->amount = (int)$amount;
}

Das TypeCasting das hier via (int) stattfindet kann zu unerwarteten, forcierten Rundungsergebnissen führen, zumindest wo ich es getestet habe.

https://stackoverflow.com/questions/20758881/why-is-php-typecasting-behaving-like-this-int-mis-rounding-numbers

So z.B. ein Fall mit:

$amount=17.90;
// $amount ist hiermit ein float

$mpay24->refund(‘00000000000’, ($amount * 100));
// Übergeben wird nun zwangsläufig ein float, aber halt ohne Nachkommastellen

public function setAmount($amount)
{
$this->amount = (int)$amount;
// $this->amount ist nun 1789
}

Das ist wie es bei den Gutschriften zum Rundungsproblem kam. War halt völlig unerwartet und tauchte beim Test nicht auf, denn interessanterweise gibt es Beträge wo das nicht passiert. 25,90 => kein Problem. 19,20 => kein Problem. 17,90 => Problem!

Natürlich kann man dem entgegenwirken indem man schon vorher einen Integer übergibt. Aber vielleicht wäre in den Funktionen die den Amount annehmen die Erwartung einen Integer zu erhalten besser als es nachher zu typecasten:

/**
 * @param int $amount
 */
public function setAmount(int $amount)
{
    $this->amount = (int)$amount;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions