PHP: dizeye bir 64bit tamsayı dönüştürme

4 Cevap php

Ben bir dize değişkeni bir kodlanmış 64bit tamsayı kullanmaya çalışıyorum.

Ben böyle bir şey yapmak istiyorum Simplfied:

$i = 76561197961384956;
$s = "i = $i";

Neden hangi s varlık:

i = 76561197961384956

PHP float büyük tamsayılar dökme olarak Bu tabii ki çalışmaz, bu nedenle s olduğunu:

i = 7.65611979614E+16

Vb döküm gibi birçok diğer yöntemler başarısız olsa, ben buldum number_format() ve bu gibi kullanmak:

$s = "i = " . number_format($i, 0, '.', '');

Ama bu s olmanın sonuçları:

i = 76561197961384960

Yaklasik bir sorun gibi görünüyor, ama bu nasıl düzeltebilirim?

4 Cevap

Sen değil dize dönüşüm, atama hassasiyet kaybediyoruz. Bu değişkenin değeri aslında kodlanmış, ve bunu değiştiremezsiniz, yapabileceğiniz hiçbir şey yok.

Bir çizgi gibi:

$i = 76561197961384956;

her zaman hassasiyet kaybedersiniz. Eğer bir dizeye saklamak, her şeyi tutmak gerekiyorsa, öyle bir int olarak saklamak ve tüm haneleri devam edemez.

şimdi php büyük tamsayı matematik yapmak için tek yol dizeleri gibi çok sayıda işlemek BCMath veya gmp uzantıları kullanmaktır. 64bit tamsayı PHP6 olarak planlanır.

çok büyük tamsayıları kullanarak dize onları döküm veya (float otomatik döküm) atama konusunda hassasiyet kaybetmek ve sonra daha fazla sayıda işleme dize matematik kütüphaneleri kullanmak olacaktır.

Eğer PHP'nin intval () işlevini kullanarak denediniz mi?