SORU
30 EKİM 2014, PERŞEMBE


Nasıl 10, 100, 1000, 10.000 ertesi birden fazla sayı değerini arttırmak ve böylece

Bu soruyu lafzı mazur görün, sormak, daha kısa ve öz daha iyi bir yolu vardır eminim, ama bilmiyorum.

Hadi bir grafik var, ve y ekseni değerleri vardır

[0,4,5,3,2,5,6]

Değeri en fazla altı. Y-Ölçek 10 0 etiketli olmak istiyorum.

Aşağıdaki değerler verilmiştir

[33,26,54,23,86,23]

En büyük değer 86, bu yüzden Y-Ölçek 90 0 ile gitmek istiyorum.

Şimdi aşağıdaki değerleri var

[98,253,87, 876,263]

Max 876,yani Y-ölçek 900 0 gitmeli

Şimdi bana şu ana kadar ihtiyacım var y-ölçek max değerleri gereken aşağıdaki fonksiyonu oluşturdum.

function padMaxValue(value){
        for(var i = 1; i < 1000000000000000000; i = i * 10){
            var decimalValue = value / i;

            if(value === i){
                return i;
            }

            if(decimalValue < 1 && decimalValue > 0.09){
                return i;
            }

        }
    }

Ancak, aşağıdaki değerler verilmiştir

[99,123,82,189,45]

Benim işlevi 1000 y-ölçek max ayarlayın. Ama max 200 olmalı. Benim ihtiyacım olan şey sadece 10 ile çarpılarak yerine i değerini artırmak için daha akıllı bir yol olduğunu fark ettim. 10, sonuna kadar 100 ile ben değerini artırmak için mümkün olmak istiyorum. O zaman 1000 100 kadar artış. Sonra artış 1000, sonuna kadar 10,000 ve benzeri.

Bunu yapmak için temiz ve düzenli bazı matematiksel yolu olmalı gibi hissediyorum. Ve ben de for döngüsü var 1000000000000000000 sayı matematik cahilliğimi ihanet hissediyorum.

Anyhoot, sorun da bu zaten. Herhangi bir fikir?

CEVAP
30 EKİM 2014, PERŞEMBE


Eğer ondalık bir değer olsaydı garip olabilir hangi dizeler arazi, girmeye gerek yok.

function RoundedMax(a) {
    var mx = Math.max.apply(Math, a);
    if (mx == 0) {return 0};
    var size = Math.floor(Math.log(Math.abs(mx)) / Math.LN10);
    var magnitude = Math.pow(10, size);
    var yMax = Math.ceil(mx / magnitude) * magnitude;
    return yMax;
}

function RoundedMin(a) {
    var mn = Math.min.apply(Math, a);
    if (mn == 0) {return 0};
    var size = Math.floor(Math.log(Math.abs(mn)) / Math.LN10);
    var magnitude = Math.pow(10, size);
    var yMin = Math.floor(mn / magnitude) * magnitude;
    return yMin;
}

var arr = [-9.9,-1.23,-8.2,-2.01,-4.5,0];
document.write(RoundedMax(arr)   " "   RoundedMin(arr));

Çıkışlar: 0 -10.

EDİTBu açıklamalar ışığında güncellendi. Şimdi bile IE8 çalışır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • Ludique

    Ludique

    21 NİSAN 2009
  • TheRightTire

    TheRightTire

    14 EKİM 2009