2016-04-04 27 views
0

Sana kullanarak ondalık basamak belirli sayıda gitmek için bir değişken söyleyebilir biliyorum:Kütle Değişken Ondalık Basamaklar PHP

string number_format (float $number [, int $decimals = 3 ]) 

Ancak, tüm numaralar için topluca bunu yapmanın bir yolunu bulamıyor. Yüzlerce değişkene sahip olduğumdan, hepsinin aynı ondalık basamak sayısına sahip olması gerektiğinden (sıfırlar mı yoksa sıfırlar mı demek olsun), sadece bu komutu yazarak yazmak yerine tahtaya otomatik olarak söyleyebilmeyi istiyorum. tüm değişkenler için yukarıdaki komutta.

Bu işlev var mı, yoksa hepsini uzun yoldan yazmak zorunda mıyım? Komut varsa, .ini dosyasında değiştirebileceğim bir satır var mı?

Şimdiden teşekkürler.

Bu sayıları bir veritabanında saklamıyorum - ekranda yankılanıyorum ve bir e-posta gönderiyorum.

(Bir HTML formu tarafından oluşturulan kullanıcı girdisinden bir denklem var).

E-postayı alan kişi, tüm sayıların üçüncü ondalık sayıya yuvarlatılmasını istedi, bunun anlamı binde dördünde yuvarlama anlamına geliyorsa ya da yalnızca tam sayılara, ondalıklara veya yüzüncü noktaya ihtiyaç duyuyorsa, binde 1'e ulaşıyor. Bireysel değişkenler yüzlerce vb $ sayı1, $ sayı2, yani tam anlamıyla vardır

+0

"tüm sayılar" ı tanımlayabilir misiniz, bu numaralar nedir ve nereden geliyorlar? – Martin

+0

Bu, nispeten ilginç olabilir: http://floating-point-gui.de/ – Martin

+0

Yüzlerce değişkenle ne demek istiyorsunuz? hepsi rastgele isimler mi? ya da tek bir dizide mi? – Jester

cevap

0

Eğer bu satırı çalıştırabilir Betiğinizde dize değişkenleri uygulanan tüm numaraları hakkında söz varsa: Açıkçası

if(is_int($value) || is_float($value)){ 
    $value = number_format (float $number ,3); 
} 

$values = get_defined_vars(); 
foreach ($values as $key=>$value){ 
    if(is_string($value) && (float)$value == (string)$value){ 
     $value = number_format ((float)$value , 3); 
    } 
    /*** 
    Save over the original script variables with the edited ones. 
    Note double dollar 
    ***/ 
    $$key = $value; 
} 
unset($values,$value,$key); 

baz-2 (bilgisayar depolama) içinde kayan nokta sayıları doğasında olduğuna okuma yapabileceğini: Eğer dize yüzen sayısal olup olmadığını kontrol etmek de benzer bir sorgu çalıştırabilirdizeleri başvuru ly yanlış şekilde saklanır, http://floating-point-gui.de/'u okuyun.

Ayrıca, gerçekten, neden bu kadar gereksiz iğrenç hassasiyete ihtiyacınız var?

Fakat daha sonra bu komut çalıştırıldığında, komutlar çoğunlukla değerlerin boş olduğu sırada başlıyor mu? Ya da değerlerin daha çok kullanıldığı ve artık aktif olmadığı durumlarda?

Sanırım cevabım sorunuzu yanıtlıyor ama sanırım sorunun aslında sorununuzu açıklamıyor. Yorum/düzenlenmiş qestion yanıt olarak


:

Bunun yerine $values = get_defined_vars(); bir diziye giriş tasarrufu ve dizi ile yukarıda foreach yaparak değerleri kullanmak kullanarak.

$values = array(array of numbers); 
foreach ($values as &$value){ 
    if(is_string($value) && (float)$value == (string)$value){ 
     $value = number_format ((float)$value , 3); 
    } 
} 
unset($value,$key); 

Bu, dizideki tüm değerleri, sayısallaştırılmış sayısal yerleşimlere sahip olacak şekilde güncelleyecektir.

+0

Bu, gereksinimimi açıklığa kavuşturmak için yukarıdaki yorumumdan bir yeniden yapıştır: \t Bu numaraları bir db'de saklamıyorum - onları ekranda ekliyorum ve bir e-posta gönderiyorum. (Bir HTML formu tarafından oluşturulan kullanıcı girişinden bir denklem var). E-postayı alan kişi, tüm sayıların üçüncü ondalık sayıya yuvarlanmasını istemiştir. Bu, binde yalnızca binlerin sayısına yuvarlamak veya yalnızca tam sayılara, ondalıklara veya yüzlerce deseye ihtiyaç duyuyorsa, binde 1'e ulaşmak anlamına gelir. Gerçekten yüzlerce bireysel değişken vardır, yani $ number1, $ number2, vb. – sparrowhawk87

+0

Cevabımı sizin için düzenledim. Temel olarak, bir dizi @ sparrowhawk87 kullanın – Martin