ne izlemeli?
 
Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Twitter Sayı Formatı - Dart
#1
-Twitter'daki gibi 5 B, 12 B, 1,4 Mn tarzında bir değer döndürür. Bu kodların biraz sphagetti olduğunu hissediyorum fakat daha fazla nasıl sadeleştirilebilir bilemedim.

Kod:
Kod:
void main() {
  print(numberFormatTwitter(123));
  print(numberFormatTwitter(500));
  print(numberFormatTwitter(1000));
  print(numberFormatTwitter(5423));
  print(numberFormatTwitter(50000));
  print(numberFormatTwitter(56489));
  print(numberFormatTwitter(200000));
  print(numberFormatTwitter(234895));
  print(numberFormatTwitter(4000000));
  print(numberFormatTwitter(4321543));
  print(numberFormatTwitter(500000000));
  print(numberFormatTwitter(533248422));
  print(numberFormatTwitter(90000000000));
  print(numberFormatTwitter(93875642318));
}

String numberFormatTwitter(int number) {
  String formatted = '';
  int thousand = 1000;
  int million = thousand * 1000;
  int billion = million * 1000;
  int trillion = billion * 1000;

  if (number < thousand) {
    formatted = '$number';
  } else if (number < million) {
    String strNum = doubleToString(number / thousand);
    formatted = '$strNum B';
  } else if (number < billion) {
    String strNum = doubleToString(number / million);
    formatted = '$strNum Mn';
  } else if (number < trillion) {
    String strNum = doubleToString(number / billion);
    formatted = '$strNum Mr';
  } else {
    formatted =
        'o kadar beğeni/takipçi olsun bunu formatlamasak da olur be kanka :)';
  }

  formatted = formatted.replaceAll('.', ',');

  return formatted;
}

String doubleToString(double number) {
  if (number % 1 == 0) {
    return number.toInt().toString();
  } else {
    return double.parse(number.toStringAsFixed(2)).toString();
  }
}

Çıktı:
Kod:
123
500
1 B
5,42 B
50 B
56,49 B
200 B
234,9 B
4 Mn
4,32 Mn
500 Mn
533,25 Mn
90 Mr
93,88 Mr

Kodu çalıştırmak için:
https://dartpad.dev/
1pAza1.png
HTML CSS jQuery Dart Flutter

"Son Tema Ekibi Lideri"
Cevapla PGM
Teşekkür verenler:
#2
Biraz daha sadeleştirmeye çalıştım kodu şu an bu haliyle çalışıyor sanırım. Ama dart bilgim yok ne yazık ki :( Python ile yazdım
Kod:
def basamakbul(number):
        if number >= 0:
                basamak = 1
                while number > 9:
                        number = int(number / 10)
                        basamak += 1
                return basamak
        else: return "Hatalı değer."

def adlandir(number):
        if 0 <= basamakbul(number) <= 3: return str(number)
        elif basamakbul(number) == 4: return str(number)[0:1]+","+str(number)[1:3]+"B"
        elif basamakbul(number) == 5: return str(number)[0:2]+","+str(number)[2:4]+"B"
        elif basamakbul(number) == 6: return str(number)[0:3]+","+str(number)[3:5]+"B"
        elif basamakbul(number) == 7: return str(number)[0:1]+","+str(number)[1:3]+"M"
        elif basamakbul(number) == 8: return str(number)[0:2]+","+str(number)[2:4]+"M"
        elif basamakbul(number) == 9: return str(number)[0:3]+","+str(number)[3:5]+"M"

Not: Düzenleyip daha da kısalttım olduğu kadar
hatake.gif
Cevapla PGM
Teşekkür verenler:
#3
(08-06-2021 Saat: 20:29)Hatake Nickli Kullanıcıdan Alıntı: Biraz daha sadeleştirmeye çalıştım kodu şu an bu haliyle çalışıyor sanırım. Ama dart bilgim yok ne yazık ki :( Python ile yazdım
Kod:
def basamakbul(number):
        if number >= 0:
                basamak = 1
                while number > 9:
                        number = int(number / 10)
                        basamak += 1
                return basamak
        else: return "Hatalı değer."

def adlandir(number):
        if 0 <= basamakbul(number) <= 3: return str(number)
        elif basamakbul(number) == 4: return str(number)[0:1]+","+str(number)[1:3]+"B"
        elif basamakbul(number) == 5: return str(number)[0:2]+","+str(number)[2:4]+"B"
        elif basamakbul(number) == 6: return str(number)[0:3]+","+str(number)[3:5]+"B"
        elif basamakbul(number) == 7: return str(number)[0:1]+","+str(number)[1:3]+"M"
        elif basamakbul(number) == 8: return str(number)[0:2]+","+str(number)[2:4]+"M"
        elif basamakbul(number) == 9: return str(number)[0:3]+","+str(number)[3:5]+"M"

Not: Düzenleyip daha da kısalttım olduğu kadar


basamakbul fonksiyonu yerine len(str(number)) yapmak daha mantıklı gibi geldi. Sonuçta girilen veri sayı olacağı için bir problem olacağını sanmıyorum.

Fonksiyonu biraz daha geliştirdim ve sanırım istediğim bir yapıya getirebildim. Biraz daha inceleyip daha fazla neler yapabilirim diye bakınacağım.

Kod:
Kod:
import 'dart:math';

void main() {
  print(numberFormatTwitter(0));
  print(numberFormatTwitter(1));
  print(numberFormatTwitter(12));
  print(numberFormatTwitter(123));
  print(numberFormatTwitter(500));
  print(numberFormatTwitter(1000));
  print(numberFormatTwitter(5423));
  print(numberFormatTwitter(50000));
  print(numberFormatTwitter(56489));
  print(numberFormatTwitter(200000));
  print(numberFormatTwitter(234895));
  print(numberFormatTwitter(4000000));
  print(numberFormatTwitter(4321543));
  print(numberFormatTwitter(500000000));
  print(numberFormatTwitter(533248422));
  print(numberFormatTwitter(90000000000));
  print(numberFormatTwitter(93875642318));
  print(numberFormatTwitter(938756423188));
  print(numberFormatTwitter(194975465432454));
}

String numberFormatTwitter(int number) {
  int digitCount = '$number'.length;
  int multipleOfThree = digitCount ~/ 3;
  int remainderOfDivisionByThree = digitCount % 3;

  Map<String, dynamic> digitMap =
      getDigitMap(multipleOfThree, remainderOfDivisionByThree);

  String strNum = doubleToString(number / pow(1000, digitMap['pow']));

  String formatted = '$strNum';

  if (number >= 1000) {
    formatted += ' ${digitMap['name']}';
    formatted = formatted.replaceAll('.', ',');
  }

  return formatted;
}

String doubleToString(double number) {
  if (number % 1 == 0) {
    return number.toInt().toString();
  } else {
    return double.parse(number.toStringAsFixed(2)).toString();
  }
}

Map<String, dynamic> getDigitMap(
    int multipleOfThree, int remainderOfDivisionByThree) {
  String codeStr = '$multipleOfThree-$remainderOfDivisionByThree';
  Map<String, dynamic> digitMap = {};

  switch (codeStr) {
    case '0-1':
    case '0-2':
    case '1-0':
      digitMap['name'] = '';
      digitMap['pow'] = 0;
      break;
    case '1-1':
    case '1-2':
    case '2-0':
      digitMap['name'] = 'B';
      digitMap['pow'] = 1;
      break;
    case '2-1':
    case '2-2':
    case '3-0':
      digitMap['name'] = 'Mn';
      digitMap['pow'] = 2;
      break;
    case '3-1':
    case '3-2':
    case '4-0':
      digitMap['name'] = 'Mr';
      digitMap['pow'] = 3;
      break;
    default:
      digitMap['name'] = 'sen milyon milyar';
      digitMap['pow'] = 0;
      break;
  }

  return digitMap;
}

Çıktı:
Kod:
0
1
12
123
500
1 B
5,42 B
50 B
56,49 B
200 B
234,9 B
4 Mn
4,32 Mn
500 Mn
533,25 Mn
90 Mr
93,88 Mr
938,76 Mr
194975465432454 sen milyon milyar

Kodu çalıştırmak için:
https://dartpad.dev/
1pAza1.png
HTML CSS jQuery Dart Flutter

"Son Tema Ekibi Lideri"
Cevapla PGM
Teşekkür verenler:


Hızlı Menü:


Şu anda bu konuyu okuyanlar: 1 Ziyaretçi



eXpertBoss -

Online Shopping App