JavaScript'te ondalık sayıları kesin (yuvarlamayın)


93

Ondalık sayıları ondalık basamaklar halinde kesmeye çalışıyorum. Bunun gibi bir şey:

5.467   -> 5.46  
985.943 -> 985.94

toFixed(2)hemen hemen doğru olanı yapar ama değeri yuvarlar. Değerin yuvarlanmasına ihtiyacım yok. Umarım bu javascript ile mümkündür.


6
jQuery yalnızca bir çerçevedir ve sorununuz jQuery ile ilgili değildir. Daha çok JavaScript'te bazı temel hesaplamalar yapmakla ilgilidir. Umarım jQuery olmayan bir çözümden de memnunsunuzdur.
Felix Kling

Hesaplamalarımın Javascript kullanarak sadece 2 ondalık sayı döndürmesini sağlamak için çok fazla çalışma olduğunu buldum. Bunun yerine veritabanı görünümümde bunu kolayca yapabildim. Bu yöntemin her duruma uymayacağının farkındayım, ancak bunu burada ortaya koymak istiyorum çünkü birisine çok zaman kazandırabilir.
MsTapp

Yanıtlar:


51

upd :

Sonuçta, ne kadar telafi etmeye çalışırsanız çalışın, yuvarlanan böcekler sizi her zaman rahatsız edecek. Bu nedenle, sayılar tam olarak ondalık gösterimle temsil edilerek sorun aşılmalıdır.

Number.prototype.toFixedDown = function(digits) {
    var re = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"),
        m = this.toString().match(re);
    return m ? parseFloat(m[1]) : this.valueOf();
};

[   5.467.toFixedDown(2),
    985.943.toFixedDown(2),
    17.56.toFixedDown(2),
    (0).toFixedDown(1),
    1.11.toFixedDown(1) + 22];

// [5.46, 985.94, 17.56, 0, 23.1]

Başkalarının derlemesine dayanan eski hataya açık çözüm:

Number.prototype.toFixedDown = function(digits) {
  var n = this - Math.pow(10, -digits)/2;
  n += n / Math.pow(2, 53); // added 1360765523: 17.56.toFixedDown(2) === "17.56"
  return n.toFixed(digits);
}

4
Evet, prototipler tarayıcılar arası güvenilir şekilde çalışmaz. Bu (sınırlı amaç) işlevi tip sistemi aracılığıyla, güvenilir bir şekilde çalışmayacak şekilde tanımlamak yerine, neden onu bir kitaplığa koymuyorsunuz?
Thomas W

3
Bu istisna edildiği gibi çalışmaz. 17.56 sayısını ve basamak = 2'yi deneyin. 17.56 olmalıdır, ancak bu işlev 17.55 döndürür.
shendz

2
Bu işlevle iki tutarsızlık: Bu işlev bir dizge döndürür, böylece yerine 1.11.toFixedDown(1) + 22sonlanır . Ayrıca üretmeli ama onun yerine üretmelidir . 1.12223.10.toFixedDown(1)0-0.1
Nick Knowlson

5
Bu işlevin eksi işaretini kaldırdığını unutmayın. Ör: (-10.2131).toFixedDown(2) // ==> 10.21.
rgajrawala

4
Ayrıca (1e-7).toFixedDown(0) // ==> 1e-7,. Söz konusu mu 1e-(>=7)(eski: 1e-8, 1e-9, ...).
rgajrawala

60

Dogbert'in cevabı iyidir, ancak kodunuzun negatif sayılarla uğraşması gerekiyorsa, Math.floorkendi başına beklenmedik sonuçlar verebilir.

Örneğin Math.floor(4.3) = 4, amaMath.floor(-4.3) = -5

Tutarlı sonuçlar elde etmek için bunun gibi bir yardımcı işlev kullanın:

truncateDecimals = function (number) {
    return Math[number < 0 ? 'ceil' : 'floor'](number);
};

// Applied to Dogbert's answer:
var a = 5.467;
var truncated = truncateDecimals(a * 100) / 100; // = 5.46

İşte bu işlevin daha kullanışlı bir versiyonu:

truncateDecimals = function (number, digits) {
    var multiplier = Math.pow(10, digits),
        adjustedNum = number * multiplier,
        truncatedNum = Math[adjustedNum < 0 ? 'ceil' : 'floor'](adjustedNum);

    return truncatedNum / multiplier;
};

// Usage:
var a = 5.467;
var truncated = truncateDecimals(a, 2); // = 5.46

// Negative digits:
var b = 4235.24;
var truncated = truncateDecimals(b, -2); // = 4200

Bu istenmeyen bir davranışsa, Math.absilk satıra bir çağrı ekleyin :

var multiplier = Math.pow(10, Math.abs(digits)),

DÜZENLEME: shendz doğru bir şekilde bu çözümün kullanılmasının a = 17.56yanlış üreteceğine işaret ediyor 17.55. Bunun neden olduğu hakkında daha fazla bilgi için Her Bilgisayar Bilimcisinin Kayan Nokta Aritmetiği Hakkında Bilmesi Gerekenler'i okuyun . Ne yazık ki, tüm kayan nokta hatası kaynaklarını ortadan kaldıran bir çözüm yazmak, javascript ile oldukça zordur. Başka bir dilde tamsayılar veya belki bir Ondalık türü kullanırsınız, ancak javascript ile ...

Bu çözüm % 100 doğru olmalı , ancak aynı zamanda daha yavaş olacaktır:

function truncateDecimals (num, digits) {
    var numS = num.toString(),
        decPos = numS.indexOf('.'),
        substrLength = decPos == -1 ? numS.length : 1 + decPos + digits,
        trimmedResult = numS.substr(0, substrLength),
        finalResult = isNaN(trimmedResult) ? 0 : trimmedResult;

    return parseFloat(finalResult);
}

Hıza ihtiyaç duyan ancak aynı zamanda kayan nokta hatalarından kaçınmak isteyenler için BigDecimal.js gibi bir şey deneyin . Bu SO sorusunda diğer javascript BigDecimal kitaplıklarını bulabilirsiniz: "İyi bir Javascript BigDecimal kitaplığı var mı?" ve işte Javascript matematik kitaplıkları hakkında güzel bir blog yazısı


Neden beklenmedik? 0'ın altına düştüğünüzde yuvarlamanın yönünü değiştirmek, her türlü aritmetik artefaktlara ve berbat matematiğe neden olur. Örneğin, diğer tam sayıların iki katı kadar sayı 0'a yuvarlanır. Grafikler, muhasebe ve diğer birçok kullanım için berbat sonuçlar alırsınız. Doğruyu söylemek gerekirse, öneri ne söylemek zor olurdu iyi o ne söylemek için için değil .
Thomas W

Tam olarak söylediği şey için iyidir - yuvarlamak yerine ondalık sayıları kesmek istediğinizde.
Nick Knowlson

1
17.56 ile çalışmayacak çünkü tarayıcı 17.56 * 100 = 1755.9999999999998 veriyor 1756 değil
shendz

İyi nokta shendz. Cevabımı buna ihtiyaç duyanlar için tüm kayan nokta hatasını ortadan kaldıran bir çözümle güncelledim.
Nick Knowlson 13

1
Bu, ondalık sayı istemiyorsanız 1'den küçük sayılar için işe yaramaz - bir kontrol eklemediğiniz sürece truncateDecimals (.12345, 0) NaN ile sonuçlanır: if(isNAN(result) result = 0; İstediğiniz davranışa bağlıdır.
Jeremy Witmer

35
var a = 5.467;
var truncated = Math.floor(a * 100) / 100; // = 5.46

5
Bu iyi çalışıyor, ancak kendisi (veya daha sonra bu yanıta bakan başka biri) negatif sayılarla uğraşmak zorunda kalırsa muhtemelen istenmeyen sonuçlar verecektir. Bakın stackoverflow.com/a/9232092/224354
Nick Knowlson

3
Neden istenmeyen? 0'ın altına indiğinizde yuvarlamanın yönünü değiştirmek her türlü aritmetik artefaktlara neden olur.
Thomas W

8
Yuvarlama ve kesme arasında bir fark vardır. Kesmek, açıkça bu sorunun aradığı davranıştır. Geri arar truncate(-3.14)ve -4geri alırsam, buna kesinlikle istenmeyen derim.
Nick Knowlson

Thomas'a katılıyorum. Perspektifteki fark, genellikle görüntüleme için mi yoksa hesaplama için mi kesiyor olmanıza bağlı olabilir. Hesaplamalı bir bakış açısıyla, bu "aritmetik eserlerden" kaçınır

3
var a = 65.1 var truncated = Math.floor(a * 100) / 100; // = 65.09 Dolayısıyla bu doğru bir çözüm değil
Sanyam Jain

22

Yuvarlamayı, toFixed için 0,5 çıkararak düzeltebilirsiniz, örneğin

(f - 0.005).toFixed(2)

1
Dikkat: Bu çok küçük sayılar, 3'ten fazla ondalık basamağa sahip sayılar veya negatif sayılar için işe yaramaz. .0045, 5.4678 ve -5.467'yi deneyin
Nick Knowlson

Bu, çıkardığınız değeri, sahip olmak istediğiniz uzunlukla eşleştirdiğiniz sürece işe yarayacaktır. Fixed () 'e ilettiğiniz her neyse, ondalıktan sonraki 0 ​​sayısı olmalıdır.
dmarra

18

Düşünün çift tildeli yararlanarak:~~ .

Numarayı al. Ondalık basamaktan sonra anlamlı basamaklarla çarpın, böylece ile sıfır basamak kesebilirsiniz~~ . Bu çarpanı tekrar bölün. Kar.

function truncator(numToTruncate, intDecimalPlaces) {    
    var numPower = Math.pow(10, intDecimalPlaces); // "numPowerConverter" might be better
    return ~~(numToTruncate * numPower)/numPower;
}

~~Aramayı parantez içinde sarmalamaya direnmeye çalışıyorum ; Operasyon sırasının bunun doğru çalışmasını sağlaması gerektiğine inanıyorum.

alert(truncator(5.1231231, 1)); // is 5.1

alert(truncator(-5.73, 1)); // is -5.7

alert(truncator(-5.73, 0)); // is -5

JSFiddle bağlantısı .

DÜZENLEME: Geriye dönüp baktığımda, istemeden de ondalık sayının solunu yuvarlamak için davaları ele aldım.

alert(truncator(4343.123, -2)); // gives 4300.

Mantık, bu kullanımı arayan biraz tuhaftır ve hızlı bir yeniden düzenleme işleminden yararlanabilir. Ama yine de çalışıyor. İyiden daha şanslı.


Bu en iyi cevap. MathPrototipi bununla genişletirseniz ve çalıştırmadan önce NaN'leri kontrol ederseniz , mükemmel olur.
Bartłomiej Zalewski

truncator((10 * 2.9) / 100, 2)0.29 ... yerine 0.28 döndür
Alex

14

Güzel tek satırlık çözüm:

function truncate (num, places) {
  return Math.trunc(num * Math.pow(10, places)) / Math.pow(10, places);
}

O halde şu numarayı arayın:

truncate(3.5636232, 2); // returns 3.56
truncate(5.4332312, 3); // returns 5.433
truncate(25.463214, 4); // returns 25.4632

2
Bu çözümü beğendim, ancak tüm tarayıcılar tarafından tam olarak desteklenmediğini unutmayın. ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… )
Gene Parcellano

11

|Basit olduğu ve iyi çalıştığı için kullanarak bir cevap vereceğimi düşündüm .

truncate = function(number, places) {
  var shift = Math.pow(10, places);

  return ((number * shift) | 0) / shift;
};

1
İyi karar. Bitsel bir operatör kullanmak, değeri bir int'e zorlar ve or0 ile ing "sadece sahip olduğum şeyi koru" anlamına gelir. ~~Cevabımın yaptığı şeyi yapar, ancak tek bir bitsel işlemle. Yazılanla aynı sınırlamaya sahip olsa da: 2 ^ 31'i aşamayız .
ruffin

1
truncate((10 * 2.9) / 100);bu kod 0.29 jsfiddle.net/9pf0732d
Alex

@Alex Sanırım farkına varmışsınızdır ... JavaScript'e hoş geldiniz! . Düzeltmeler var. Belki birini paylaşmak istersiniz? : D
ruffin

@ruffin Bu konuyu biliyorum =) Bu cevabın bu sorunun çözümü olduğunu düşündüm. Maalesef henüz kesin bir çözüm bulamadım, her yerde böyle bir sorun var.
Alex

7

Bitsel operatörler kullanarak kırpın:

~~0.5 === 0
~~(-0.5) === 0
~~14.32794823 === 14
~~(-439.93) === -439

Bu referans nasıl
işliyor

Bir şeyi örneğin 2 ondalık basamağa nasıl kısaltır?
Salman A

7

@ Dogbert'in cevabı Math.trunc, yuvarlama yerine kısaltan ile geliştirilebilir .

Yuvarlama ve kesme arasında bir fark vardır. Kesmek, açıkça bu sorunun aradığı davranıştır. Truncate (-3.14) ararsam ve -4 geri alırsam, buna kesinlikle istenmeyen derim. - @NickKnowlson

var a = 5.467;
var truncated = Math.trunc(a * 100) / 100; // = 5.46
var a = -5.467;
var truncated = Math.trunc(a * 100) / 100; // = -5.46

1
Bu her durumda çalışmaz, yani console.log (Math.trunc (9.28 * 100) / 100); // 9.27
Mike Makuch

@MikeMakuch bu bir sorun Math.truncdeğil 9.28 * 100, 927.9999daha ziyade 928. The Perils of Floating Point
zurfyx

5

Daha kısa bir yöntem kullanarak bir cevap yazdım. İşte bulduğum şey

function truncate(value, precision) {
    var step = Math.pow(10, precision || 0);
    var temp = Math.trunc(step * value);

    return temp / step;
}

Yöntem şu şekilde kullanılabilir

truncate(132456.25456789, 5)); // Output: 132456.25456
truncate(132456.25456789, 3)); // Output: 132456.254
truncate(132456.25456789, 1)); // Output: 132456.2   
truncate(132456.25456789));    // Output: 132456

Veya daha kısa bir sözdizimi istiyorsanız, işte burada

function truncate(v, p) {
    var s = Math.pow(10, p || 0);
    return Math.trunc(s * v) / s;
}

bu, kullanmayı
umduğum yöntemdi

4
Number.prototype.trim = function(decimals) {
    var s = this.toString();
    var d = s.split(".");
    d[1] = d[1].substring(0, decimals);
    return parseFloat(d.join("."));
}

console.log((5.676).trim(2)); //logs 5.67

Bunun dizelerle çalışmasını ve böylece kayan nokta sayılarının nüanslarını ortadan kaldırmasını seviyorum. Teşekkürler!
iCode

4

Bu işlevin basit bir çözüm olabileceğini düşünüyorum:

function trunc(decimal,n=2){
  let x = decimal + ''; // string 
  return x.lastIndexOf('.')>=0?parseFloat(x.substr(0,x.lastIndexOf('.')+(n+1))):decimal; // You can use indexOf() instead of lastIndexOf()
}

console.log(trunc(-241.31234,2));
console.log(trunc(241.312,5));
console.log(trunc(-241.233));
console.log(trunc(241.2,0));  
console.log(trunc(241));


Bu yayınlandıktan iki yıl sonra ancak Math.trunc, regex, vb. Kullanarak en iyi yolu bulmaya çalışırken tökezledim. Bu çözümü gerçekten seviyorum. Çok basit ama mükemmel çalışıyor (yine de benim kullanım durumum için).
giles123

Yine de n = 0'ı hesaba katmayı unutmayın.
giles123

3

Bir sorun buldum: sonraki durumu düşünürsek: 2.1 veya 1.2 veya -6.4

Ya her zaman 3 ondalık veya iki veya daha fazla ondalık istersen, sağdaki baştaki sıfırları tamamlaman gerekir.

// 3 decimals numbers
0.5 => 0.500

// 6 decimals
0.1 => 0.10000

// 4 decimales
-2.1 => -2.1000

// truncate to 3 decimals
3.11568 => 3.115

Bu, Nick Knowlson'ın sabit işlevidir.

function truncateDecimals (num, digits) 
{
    var numS = num.toString();
    var decPos = numS.indexOf('.');
    var substrLength = decPos == -1 ? numS.length : 1 + decPos + digits;
    var trimmedResult = numS.substr(0, substrLength);
    var finalResult = isNaN(trimmedResult) ? 0 : trimmedResult;

    // adds leading zeros to the right
    if (decPos != -1){
        var s = trimmedResult+"";
        decPos = s.indexOf('.');
        var decLength = s.length - decPos;

            while (decLength <= digits){
                s = s + "0";
                decPos = s.indexOf('.');
                decLength = s.length - decPos;
                substrLength = decPos == -1 ? s.length : 1 + decPos + digits;
            };
        finalResult = s;
    }
    return finalResult;
};

https://jsfiddle.net/huttn155/7/


x = 0.0000test truncateDecimals (x, 2)başarısız. döner 0. beklendiği gibi değil0.00
Ling Loeng

3
function toFixed(number, digits) {
    var reg_ex = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)")
    var array = number.toString().match(reg_ex);
    return array ? parseFloat(array[1]) : number.valueOf()
}

var test = 10.123456789
var __fixed = toFixed(test, 6)
console.log(__fixed)
// => 10.123456

3

@ Kirilloid tarafından verilen cevap doğru cevap gibi görünüyor, ancak ana kodun güncellenmesi gerekiyor. Çözümü negatif sayılarla ilgilenmiyor (birisi yorum bölümünde bahsetti ancak ana kodda güncellenmedi).

Bunu eksiksiz bir son test edilmiş çözüme güncellemek:

Number.prototype.toFixedDown = function(digits) {
    var re = new RegExp("([-]*\\d+\\.\\d{" + digits + "})(\\d)"),
    m = this.toString().match(re);
    return m ? parseFloat(m[1]) : this.valueOf();
};

Örnek Kullanım:

var x = 3.1415629;
Logger.log(x.toFixedDown(2)); //or use whatever you use to log

Fiddle: JS Numarası Yuvarlama

Not: Bu çözüm hakkında yorum yapmak için yeterli repo yok.


2

Burada, sayıyı 2 ondalık basamağa kadar kesmek için basit ama çalışan bir işlev.

           function truncateNumber(num) {
                var num1 = "";
                var num2 = "";
                var num1 = num.split('.')[0];
                num2 = num.split('.')[1];
                var decimalNum = num2.substring(0, 2);
                var strNum = num1 +"."+ decimalNum;
                var finalNum = parseFloat(strNum);
                return finalNum;
            }

2

Ortaya çıkan tür bir sayı olarak kalır ...

/* Return the truncation of n wrt base */
var trunc = function(n, base) {
    n = (n / base) | 0;
    return base * n;
};
var t = trunc(5.467, 0.01);

2

Lodash birkaç Matematik yarar yöntemler bulduğunu söyledi can yuvarlak , zemin ve tavan yapmak , belirli bir ondalık hassas bir sayı. Bu, sondaki sıfırları bırakır.

Bir sayının üssünü kullanarak ilginç bir yaklaşım sergiliyorlar. Görünüşe göre bu, yuvarlama sorunlarını ortadan kaldırıyor.

(Not: funcbir Math.roundya da ceilya da flooraşağıda kodunda)

// Shift with exponential notation to avoid floating-point issues.
var pair = (toString(number) + 'e').split('e'),
    value = func(pair[0] + 'e' + (+pair[1] + precision));

pair = (toString(value) + 'e').split('e');
return +(pair[0] + 'e' + (+pair[1] - precision));

Kaynak koduna bağlantı


1

İşte konuyla ilgili görüşüm:

convert.truncate = function(value, decimals) {
  decimals = (decimals === undefined ? 0 : decimals);
  return parseFloat((value-(0.5/Math.pow(10, decimals))).toFixed(decimals),10);
};

Bu sadece biraz daha ayrıntılı bir versiyonu

(f - 0.005).toFixed(2)

1

Çözüm olarak işaretlenen, bugüne kadar bulduğum daha iyi çözüm, ancak 0 ile ilgili ciddi bir problemi var (örneğin, 0.toFixedDown (2) -0.01 verir). Bu yüzden şunu kullanmanızı öneririm:

Number.prototype.toFixedDown = function(digits) {
  if(this == 0) {
    return 0;
  }
  var n = this - Math.pow(10, -digits)/2;
  n += n / Math.pow(2, 53); // added 1360765523: 17.56.toFixedDown(2) === "17.56"
  return n.toFixed(digits);
}

1

İşte kullandığım şey:

var t = 1;
for (var i = 0; i < decimalPrecision; i++)
    t = t * 10;

var f = parseFloat(value);
return (Math.floor(f * t)) / t;

1
const TO_FIXED_MAX = 100;

function truncate(number, decimalsPrecison) {
  // make it a string with precision 1e-100
  number = number.toFixed(TO_FIXED_MAX);

  // chop off uneccessary digits
  const dotIndex = number.indexOf('.');
  number = number.substring(0, dotIndex + decimalsPrecison + 1);

  // back to a number data type (app specific)
  return Number.parseFloat(number);
}

// example
truncate(0.00000001999, 8);
0.00000001

ile çalışır:

  • negatif sayılar
  • çok küçük sayılar (Number.EPSILON duyarlılığı)

0

sadece benim için çalışan basit bir çözüme işaret etmek için

onu dizeye dönüştür ve sonra yeniden ifade et ...

var number = 123.45678;
var number_s = '' + number;
var number_truncated_s = number_s.match(/\d*\.\d{4}/)[0]
var number_truncated = parseFloat(number_truncated_s)

Kısaltılabilir

var number_truncated = parseFloat(('' + 123.4568908).match(/\d*\.\d{4}/)[0])

0

İşte istediğinizi yapan bir ES6 kodu

const truncateTo = (unRouned, nrOfDecimals = 2) => {
      const parts = String(unRouned).split(".");

      if (parts.length !== 2) {
          // without any decimal part
        return unRouned;
      }

      const newDecimals = parts[1].slice(0, nrOfDecimals),
        newString = `${parts[0]}.${newDecimals}`;

      return Number(newString);
    };

// your examples 

 console.log(truncateTo(5.467)); // ---> 5.46

 console.log(truncateTo(985.943)); // ---> 985.94

// other examples 

 console.log(truncateTo(5)); // ---> 5

 console.log(truncateTo(-5)); // ---> -5

 console.log(truncateTo(-985.943)); // ---> -985.94


0
Number.prototype.truncate = function(places) {
  var shift = Math.pow(10, places);

  return Math.trunc(this * shift) / shift;
};

0

Dizelerle çalışabilirsiniz. "." Olup olmadığını kontrol eder. var ve sonra dizenin bir kısmını kaldırır.

kesik (7.88, 1) -> 7.8

kesik (7.889, 2) -> 7.89

kesik (-7.88, 1) -> -7.88

function  truncate(number, decimals) {
    const tmp = number + '';
    if (tmp.indexOf('.') > -1) {
        return +tmp.substr(0 , tmp.indexOf('.') + decimals+1 );
    } else {
        return +number
    }
 }

0

Bu kadar temelde basit bir soruya neden bu kadar çok farklı yanıt olduğu konusunda biraz kafam karıştı; Bakmaya değer görünen sadece iki yaklaşım var. Https://jsbench.me/ kullanarak hız farkını görmek için hızlı bir kıyaslama yaptım .

Şu anda (26/9/2020) yanıt olarak işaretlenen çözüm budur:

function truncate(n, digits) {
    var re = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"),
        m = n.toString().match(re);
    return m ? parseFloat(m[1]) : n.valueOf();
};

[   truncate(5.467,2),
    truncate(985.943,2),
    truncate(17.56,2),
    truncate(0, 1),
    truncate(1.11, 1) + 22];

Ancak, bu genellikle çok verimli değildir dize ve regex şeyler, yapıyor ve yapacak bir Math.trunc işlevi vardır tam olarak OP sadece ondalık değil ile istediği. Bu nedenle, aynı şeyi elde etmek için bunu ve biraz fazladan aritmetiği kolayca kullanabilirsiniz.

İşte bu iş parçacığında bulduğum başka bir çözüm, kullanacağım çözüm:

function truncate(n, digits) {
    var step = Math.pow(10, digits || 0);
    var temp = Math.trunc(step * n);

    return temp / step;
}

[   truncate(5.467,2),
    truncate(985.943,2),
    truncate(17.56,2),
    truncate(0, 1),
    truncate(1.11, 1) + 22];
    

İlk yöntem ikinciye göre "% 99,92 daha yavaş", bu nedenle ikincisi kesinlikle kullanmanızı tavsiye edeceğim yöntemdir .

Tamam, işten kaçınmanın başka yollarını bulmaya geri dönelim ...

kıyaslamanın ekran görüntüsü

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.