默認情況下,mysqli以字符串形式返回所有值,MYSQLI_OPT_INT_AND_FLOAT_NATIVE
選項允許您將int和float轉換爲適當的類型。儘管這不影響小數位數。在PHP中以字符串形式返回的MySQL小數位字段
有沒有辦法自動將所有十進制字段轉換爲php浮點類型,而無需手動調用$value = (float) $row->some_decimal_field
?
默認情況下,mysqli以字符串形式返回所有值,MYSQLI_OPT_INT_AND_FLOAT_NATIVE
選項允許您將int和float轉換爲適當的類型。儘管這不影響小數位數。在PHP中以字符串形式返回的MySQL小數位字段
有沒有辦法自動將所有十進制字段轉換爲php浮點類型,而無需手動調用$value = (float) $row->some_decimal_field
?
我非常懷疑它。小數使用固定點數學,並且PHP中沒有可以提供這種數據類型的數據類型。浮動接近,但它們實際上是圓形的,這意味着將浮點數賦值爲2可能導致1.99999999999999999。因此,即使MySQL提供了一種將小數轉換爲PHP浮點數的方法,您也有可能通過從小數轉換爲浮點數來丟失數據。
如何幹淨地處理這個問題,你需要像GMP,但正如你可能已經猜到MySQL不能自動地提供給你的。您將需要在PHP中手動執行此操作。
這裏是東西,你可以用PHP做來解決這個問題:
function string_to_float($foo){
if($foo*1==$foo && !empty($foo)){
return $foo*1;
} else {
return $foo;
}
}
string_to_float($row->some_decimal_field);
真正的問題是,爲什麼你需要轉換的十進制字符串類型?如果你想在數學中使用它,PHP會自動爲你進行轉換。由於十進制字符串等同於具有相同值的浮點數。下面是一個簡單的測試:
$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 />';
將返回:
"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
您將鑄造一個固定點數據類型爲浮點數據類型,如果你做任何數學上使用正常運營的字符串。如果您不使用上述GMP,您會得到奇怪的結果或奇怪的數字近似值。 –
確定您的權利,它可能不是正確的答案,但它是一個答案,可以幫助別人尋找這樣做。 – amaster