Tutaj jest coś, co można zrobić z PHP, aby rozwiązać ten problem:
function string_to_float($foo){
if($foo*1==$foo && !empty($foo)){
return $foo*1;
} else {
return $foo;
}
}
string_to_float($row->some_decimal_field);
Prawdziwe pytanie brzmi, Dlaczego trzeba konwertować typ łańcucha dziesiętnych? Jeśli próbujesz użyć go w matematyce, php automatycznie wykona konwersję za Ciebie. Jako ciąg dziesiętny jest równoważny float o tej samej wartości. Oto prosty test:
$foo = "1.2";
$bar = 1.2;
if($foo===$bar){
$equivalent = "is";
} else {
$equivalent = "is not";
}
print '"1.2" '.$equivalent.' equal to 1.2 in type and value<br />';
if($foo==$bar){
$equivalent = "is";
} else {
$equivalent = "is not";
}
print '"1.2" '.$equivalent.' equal to 1.2 in value<br />';
$foo = "1.2"*1;
$bar = 1.2;
if($foo===$bar){
$equivalent = "is";
} else {
$equivalent = "is not";
}
print '"1.2"*1 '.$equivalent.' equal to 1.2 in type and value<br />';
który powróci:
"1.2" is not equal to 1.2 in type and value
"1.2" is equal to 1.2 in value
"1.2"*1 is equal to 1.2 in type and value
Byłbyś odlewy stały typ danych wskazują na zmiennoprzecinkowej typu danych, jeśli nie żadnej matematyki na ciąg przy użyciu normalnych operatorów. Otrzymasz dziwne wyniki lub dziwne przybliżenia liczb, jeśli nie używasz GMP, jak wspomniano powyżej. –
Dobrze, może to nie jest właściwa odpowiedź, ale jest to odpowiedź, która może pomóc innym, którzy chcą zrobić to samo. – amaster