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
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.
Nasıl hepsini birlikte yedeklenir, böy...
Nasıl birden fazla sınıflar ile bir öğ...
Nasıl böyle büyük mükafat içinde birde...
Nasıl birden fazla çalıştırmak için .B...
Nasıl Python ile birden fazla değer ge...