---
title: "Antal decimaler for float?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/2399514-antal-decimaler-for-float"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MickeA.com"
published: "2016-09-22T02:57:22.000Z"
updated: "2016-09-22T03:26:31.000Z"
replies: 1
views: 234
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/2399514-antal-decimaler-for-float"
---

# Antal decimaler for float?

## #1 — MickeA.com, 2016-09-22T02:57Z

Hej!
Följande funktion konverterar en sträng till float:

```php
function str2amount($amount, $allowSignal=true){
    $sign = 1;
    if ( is_string($amount) ) {
        $amount = trim($amount);
        if ( empty($amount) ) return "";
    }
    if ( !is_numeric($amount) ) {

        if ( $allowSignal && preg_match("/^\d+å|[JKLMNOPQR]$/", $amount) ) {
            //Transform to negative amount
            $sign = -1;
            $ptrns = array(
                "/^(\d+)å$/",
                "/^(\d+)J$/",
                "/^(\d+)K$/",
                "/^(\d+)L$/",
                "/^(\d+)M$/",
                "/^(\d+)N$/",
                "/^(\d+)O$/",
                "/^(\d+)P$/",
                "/^(\d+)Q$/",
                "/^(\d+)R$/",
            );
            $replace = array(
                '${1}0',
                '${1}1',
                '${1}2',
                '${1}3',
                '${1}4',
                '${1}5',
                '${1}6',
                '${1}7',
                '${1}8',
                '${1}9',
            );
            $amount =  preg_replace($ptrns, $replace, $amount);

        } else {
            $this->error(_('Ogiltigt belopp, inte ett tal.'));
            return false;
        }
    }
    $amount = ltrim($amount, '0');
    if ( strlen($amount) > strlen((string)PHP_INT_MAX)+1 ) {
        $this->error(_('Kunde inte konvertera till decimal. Tal för långt.'));
        return false;
    }
    $amount = preg_replace("/(\d*)(\d\d)$/", "$1.$2", $amount, 1);
    return floatval($amount)*$sign;
}
```

Jag läser in tal som strängar i formatet *1234567* och ut kommer ett formaterat tal (float) i formatet *12345.67*

Problemet är att i vissa fall läggs 10 decimaler på, och jag förstår inte varför.

Jag skickar in följande till funktionen:

```
string(18) "000000000000685691"
```

Sen blir det problem

```
var_dump: float(6856.91)
var_export: 6856.9099999999999
```

Iom det här blir en beräkning helt fel. Har ingen aning om hur jag ska få rätt på antal decimaler, något som vet?

Tack!

Permalänk: https://www.webforum.nu/p/2399514

## #2 — MickeA.com, 2016-09-22T03:26Z

Felet är enkelt att återskapa:

```php
$T = 3179.12;
echo $T."<br />";
var_dump($T);
echo "<br />";
var_export($T);
```

Ger följande:

```
3179.12
float(3179.12)
3179.1199999999999
```

Permalänk: https://www.webforum.nu/p/2399515

---

Tråden på webben: https://www.webforum.nu/amne/php/2399514-antal-decimaler-for-float
