Bir -0 neden olabilir PHP hesaplama var mı?

2 Cevap php

Bazen (Yaklaşık 2 veya 3 kez yaklaşık 90'000 değerleri calulating iken) bir karmaşık komut dosyası ile sorun yaşıyorum, bir '-0' oluşturur ve veritabanına yazar. Ben bir dize şüpheli (yüzer veya dizeleri, calulated olan değerler tamsayılar neden olabilir.) *

Bir '-0' neden olabilecek herhangi bir PHP hesaplama var mı?

* = Ah, ben bazen güçlü yazmaya nasıl özlüyorum ...

2 Cevap

ceil(), -0 üretebilir yok gibi, artı sonsuza doğru negatif bir sayı yuvarlama.

echo ceil(-.7);

// -0

Aynı sonuç ile birlikte, örneğin, round(-.2).

Bunların ikisi de doğru çözümlemek olacaktır:

(-0 == 0)
(ceil(-.7) == 0)

Bu doğru ve yanlış, sırasıyla çözmek olsa:

(-0 === 0)
(ceil(-.7) === 0)

Edit: ilginç (ve uygulanan) RFC okunabilir here.

Gurdas diyor, sen veritabanındaki güçlü yazarak olabilir. Bu bir yana, ben senin sorunun cevabını bilmiyorum ama ben sorunu yaklaşım olacağını biliyorum.

Sorun, anladığım kadarıyla, size arada, geçerli bir floating point representation of 0 olan '-0' olsun hangi durumlarda bilmek kalmamasıdır. Yani o alıyorsanız hangi durumlarda bulmak zorunda. Ben iki rotalardan birini alırdım:

  1. Değer olduğunda Xdebug, veritabanı ekleme kodunda bir hata yükseltmek '-0' (kullanım xdebug.collect_params = 1) bağımsız değişkenleri ile bir stack_trace almak için kullanın
  2. Oldukları gibi tüm işlemleri ve işlenen sonuç ve hattı ile, yapılıyor ile doldurmamak, yazısının başında boş bir dize oluşturun. Daha sonra, ekleme yan tümcesinde bir if ($ değer == '-0') {print $ string ekleyin; }