2013-08-21 23 views

cevap

1

ben çok şüpheliyim. Ondalıklar sabit nokta matematiği kullanır ve PHP'de bunu sağlayabilecek hiçbir veri türü yoktur. Şamandıralar yakına gelir, ama aslında yuvarlaktırlar, yani bir şamandıraya 2'yi atamak, bunun yerine 1.99999999999999999 sonucunu doğurabilir. MySQL PHP flotteye bir ondalık almak için bir yol sunar Yani bile, Ģamandıraya bir ondalık yayın yaparak veri kaybına riske vardır.

Eğer GMP gibi bir şey gerekir, ama muhtemelen tahmin olarak MySQL sizin için otomatik o sağlayamaz, temiz bu işlemek için. Bunu PHP'de elle yapmanız gerekecektir. İşte

0

sorunu çözmek için PHP ile yapabileceğiniz bir şeydir:

function string_to_float($foo){ 
    if($foo*1==$foo && !empty($foo)){ 
     return $foo*1; 
    } else { 
     return $foo; 
    } 
} 

string_to_float($row->some_decimal_field); 

asıl soru, Neden ondalık dize türünü dönüştürmek gerekir? Eğer bunu matematikte kullanmaya çalışıyorsanız, php sizin için otomatik olarak dönüşüm yapacaktır. Ondalık bir dize, aynı değere sahip bir yüzeye eşdeğerdir.

$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 />'; 

dönecektir: Normal operatörlerini kullanarak şeritte herhangi matematik yaparsanız bir kayan noktalı veri türüne sabit nokta veri türü döküm olacağını

"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 
+0

Burada basit bir testtir. Yukarıda belirtildiği gibi GMP kullanmıyorsanız, garip sonuçlar elde edeceksiniz veya sayılarınızın tuhaf tahminlerini alacaksınız. –

+0

Tamam Tamam, doğru cevap olmayabilir ama aynı şekilde yapmak isteyen başkalarına yardımcı olabilecek bir cevaptır. – amaster