numeriek getal wordt niet goed behandeld?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bob Jungels

Bob Jungels

05/05/2020 15:07:27
Quote Anchor link
ik heb (na enig zoeken en zo verder) volgend stukje code...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//dat zou hetzelfde moeten doen als hieronder... $a = 373.92;
//$a = 373.92;
$a = $details->accomodation_amount;

echo "before floatval: $a<br>";

$a = floatval($a);

echo "accomodation_amount : x".$a."x<br>";
if (is_numeric($a)) {
echo "is numeric<br>";
}
else {
echo "not numeric<br>";
}

$myvalue = 0.4 * $a;
echo "myvalue: $myvalue<br>";

$second = 0.4 * 373.92;
echo "second: $second<br>";


dat geeft volgende output ...

before floatval: ‭‭373.92
accomodation_amount : x0x
is numeric
myvalue: 0
second: 149.568

Met dezelfde waarde als ik ze zelf invul in plaats van uit de database haal (dus met
$a = 373.92; ipv de $a = $details->accomodation_amount;), werkt het wel.

Ik begrijp er niets van. Wellicht is het iets heel simpels, maar ik tast volledig in het duister... kan iemand me helpen?
Gewijzigd op 05/05/2020 15:16:13 door Bob Jungels
 
PHP hulp

PHP hulp

30/11/2024 21:59:02
 
- Ariën  -
Beheerder

- Ariën -

05/05/2020 15:10:25
Quote Anchor link
Modbreak:
Welkom op PHPhulp.
Je topic titel vind ikzelf ook een beetje vreemd. Zou je deze kunnen aanpassen zodat deze je probleem omschrijft? Daarnaast kan je met de code-tags je code leesbaarder maken.
Gewijzigd op 05/05/2020 15:10:40 door - Ariën -
 
Bob Jungels

Bob Jungels

05/05/2020 15:17:35
Quote Anchor link
kheb de titel en de code aangepast. heb je toevallig ook een idee van het probleem?
 
Thomas van den Heuvel

Thomas van den Heuvel

05/05/2020 15:49:50
Quote Anchor link
Nou, als ik de documentatie van floatval() bekijk, staat daar ongeveer bovenaan:
Quote:
May be any scalar type. floatval() should not be used on objects, as doing so will emit an E_NOTICE level error and return 1.

Het is een object property, maar je zou voor de gein eens het melden + weergeven van foutmeldingen kunnen aanzetten om te kijken of er problemen zijn? Zet het volgende bovenaan je code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
ini_set('display_startup_errors', true);
?>


Tevens, onder return value:
Quote:
The float value of the given variable. Empty arrays return 0, non-empty arrays return 1.

Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of float casting apply.

Mogelijk betreft het hier dus een array of een string op een of andere manier?

Daarbij, wat is het precieze type van $details->accomodation_amount? Wat als je hier var_dump() op loslaat?

Wederom een vraagstuk waar het probleem niet het probleem is, maar een gebrek aan handvaten voor het verzamelen van informatie omtrent het "probleem".

Tijd om te gaan debuggen.

Voorlopige conclusie: floatval() gaat mis omdat je dit op een "niet simpel type" probeert uit te voeren.
Gewijzigd op 05/05/2020 16:01:39 door Thomas van den Heuvel
 
Ivo P

Ivo P

05/05/2020 20:22:44
Quote Anchor link
en wat zegt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php var_dump($a); ?>
 

06/05/2020 10:45:38
Quote Anchor link
Het probleem zit in de data van $details->accomodation_amount:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$a
= 373.92;  // $a is nu floating point scalar
var_dump($a === $details->accomodation_amount);  // false
?>


Je moet op zoek naar de reden waarom de functie floatval() het getal 0 geeft in plaats van 373,92.
Dat kan zijn omdat omdat $details->accomodation_amount:
- een lege array is
- een string is dat niet met een getal begint
Zie: https://www.php.net/manual/en/function.floatval.php
 
Bob Jungels

Bob Jungels

06/05/2020 16:29:26
Quote Anchor link
die

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
var_dump($details->accomodation_amount)


geeft bv

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
string(7) "1169.08"
Gewijzigd op 06/05/2020 16:29:52 door Bob Jungels
 
Thomas van den Heuvel

Thomas van den Heuvel

06/05/2020 16:34:42
Quote Anchor link
Dan is er waarschijnlijk meer aan de hand, het onderstaande werkt namelijk prima:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$test
= new stdClass();

$test->value = '373.92';

echo floatval($test->value); // levert simpelweg 373.92
?>

Hoe wordt $details opgebouwd? En wat is de bron? Is dit afkomstig uit een XML-bestand ofzo?
 
Bob Jungels

Bob Jungels

06/05/2020 16:39:56
Quote Anchor link
nee, gewoon een database query... of een "unserialise" van het resultaat van een database query-veld...
 
Thomas van den Heuvel

Thomas van den Heuvel

06/05/2020 16:42:08
Quote Anchor link
Laat eens wat meer code zien (zowel rauwe data in de database alsook hoe je deze ophaalt) van een case die misgaat?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.