numeriek getal wordt niet goed behandeld?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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>";
//$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
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.
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 -
kheb de titel en de code aangepast. heb je toevallig ook een idee van het probleem?
documentatie van floatval() bekijk, staat daar ongeveer bovenaan:
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:
Tevens, onder return value:
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.
Nou, als ik de 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)
1
2
3
4
5
2
3
4
5
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
ini_set('display_startup_errors', true);
?>
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.
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
en wat zegt
Code (php)
1
2
3
4
2
3
4
<?php
$a = 373.92; // $a is nu floating point scalar
var_dump($a === $details->accomodation_amount); // false
?>
$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
Code (php)
Hoe wordt $details opgebouwd? En wat is de bron? Is dit afkomstig uit een XML-bestand ofzo?
nee, gewoon een database query... of een "unserialise" van het resultaat van een database query-veld...
Laat eens wat meer code zien (zowel rauwe data in de database alsook hoe je deze ophaalt) van een case die misgaat?