Возможна сумма десятичной точки PHP - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь суммировать это в php:

.1, .1, .1, .1, .1, .1, .1, .1, .1, .1

Это должно дать мне результат '1', но это дает мне ответ '0.9999'

Вот мой код

<?php

class Num
{
    public static function fsum(...$num)
    {
        $s = 0;
        foreach ($num as $n) {
            $s = sprintf('%.f', $s) + sprintf('%.f', $n);
        }
        return sprintf('%.f', $s);
    }
}

var_dump(Num::fsum(.1, .1, .1, .1, .1, .1, .1, .1, .1, .1));

Большое вам спасибо

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Ваш код тоже работает (у вас 10 входов, поэтому 0,1 * 10 = 1). Но делать математические операции над строкой - плохая идея. Лучше использовать номер и форматировать число на выходе.

class Num
{
    public static function fsum(...$num)
    {

        $s = 0;
        foreach ($num as $n) {
            $s = $s + (float) $n;
        }
        return sprintf('%.f', $s);
    }
}

var_dump(Num::fsum(.1, .1, .1, .1, .1, .1, .1, .1, .1));
0 голосов
/ 07 октября 2019

Вам следует рассмотреть возможность использования библиотеки bcmath для точных математических операций. Хотя здесь это не так, все равно рекомендуется.

class Num
{
    public static function fsum(...$num)
    {
        $s = 0;
        foreach ($num as $n) {
            $s = bcadd($s, $n, 2); // precision of 2, set to your own needs
        }
        return $s;
    }
}

var_dump(Num::fsum(.1, .1, .1, .1, .1, .1, .1, .1, .1, .1));
...