Rumah > Java > javaTutorial > Bagaimanakah saya boleh menukar nombor kepada perkataan dalam Java?

Bagaimanakah saya boleh menukar nombor kepada perkataan dalam Java?

Susan Sarandon
Lepaskan: 2024-12-21 18:39:17
asal
902 orang telah melayarinya

How can I convert numbers to words in Java?

Menukar Nombor kepada Perkataan dalam Java

Pengenalan:

Kita sering menghadapi senario di mana kita perlu menukar nilai berangka menjadi perwakilan perkataan mereka yang sepadan. Di Jawa, tiada fungsi terbina dalam yang melaksanakan penukaran ini secara langsung. Walau bagaimanapun, dengan sedikit kod tersuai, kami boleh membangunkan penyelesaian yang memenuhi keperluan kami.

Penyelesaian Tersuai:

Kami boleh mencipta kelas tersuai yang mengendalikan proses penukaran. Mari kita pecahkan pendekatan:

Langkah 1: Mengendalikan Nombor Kecil (0 hingga 99)

  • Buat tatasusunan yang mengandungi nama untuk nombor dari 0 hingga 19 (numNames).
  • Untuk mengendalikan nombor seperti "dua puluh" dan "tiga puluh", buat tatasusunan lain dengan nama puluhan (tensNames).

Langkah 2: Menukar Nombor Dua Digit

  • Bahagikan nombor dengan 100 untuk mendapatkan digit ratusan (ratusan).
  • Pembahagian modulus sebanyak 100 memberi kita baki dua digit (baki).
  • Dapatkan nama ratusan digit daripada numNames.
  • Gunakan gelung untuk membina perwakilan perkataan bagi dua digit yang tinggal menggunakan numNames dan tensNames.

Langkah 3: Menukar Tiga Digit Nombor

  • Ulang proses untuk nombor tiga digit.
  • Bagi dengan 1000 untuk mendapatkan ribuan (ribuan), kemudian lakukan pembahagian modulus untuk mendapatkan baki tiga digit.
  • Tambahkan nama beribu digit daripada numNames dan "ribu" ke hasil.

Langkah 4: Menukar Nombor Lebih Besar

  • Ikuti proses yang sama untuk berjuta-juta, berbilion-bilion dan seterusnya.
  • Bahagikan nombor dengan kuasa 10 yang sesuai untuk mengekstrak kiraan digit yang sepadan.
  • Bahagian modulus untuk mendapatkan baki digit.
  • Tambahkan magnitud yang betul (mis., "juta", "bilion") pada hasil.

Kod Contoh:

Kod ini menunjukkan tersuai penyelesaian:

import java.text.DecimalFormat;

public class EnglishNumberToWords {

  private static final String[] tensNames = {
    "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
  };

  private static final String[] numNames = {
    "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
    "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen",
    "seventeen", "eighteen", "nineteen"
  };

  private EnglishNumberToWords() {}

  private static String convertLessThanOneThousand(int number) {
    // Handle numbers between 0 and 99
    String soFar;
    if (number % 100 < 20){
      soFar = numNames[number % 100];
      number /= 100;
    }
    else {
      soFar = numNames[number % 10];
      number /= 10;
      soFar = tensNames[number % 10] + soFar;
      number /= 10;
    }
    if (number == 0) return soFar;
    return numNames[number] + " hundred" + soFar;
  }

  public static String convert(long number) {
    if (number == 0) { return "zero"; }
    String snumber = Long.toString(number);
    String mask = "000000000000";
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);
    // Handle billions, millions, hundred thousands, and thousands separately
    int billions  = Integer.parseInt(snumber.substring(0,3));
    int millions  = Integer.parseInt(snumber.substring(3,6));
    int hundredThousands = Integer.parseInt(snumber.substring(6,9));
    int thousands = Integer.parseInt(snumber.substring(9,12));
    String tradBillions;
    switch (billions) {
    case 0:
      tradBillions = "";
      break;
    case 1 :
      tradBillions = convertLessThanOneThousand(billions) + " billion ";
      break;
    default :
      tradBillions = convertLessThanOneThousand(billions) + " billion ";
    }
    String result =  tradBillions;
    String tradMillions;
    switch (millions) {
    case 0:
      tradMillions = "";
      break;
    case 1 :
      tradMillions = convertLessThanOneThousand(millions) + " million ";
      break;
    default :
      tradMillions = convertLessThanOneThousand(millions) + " million ";
    }
    result =  result + tradMillions;
    String tradHundredThousands;
    switch (hundredThousands) {
    case 0:
      tradHundredThousands = "";
      break;
    case 1 :
      tradHundredThousands = "one thousand ";
      break;
    default :
      tradHundredThousands = convertLessThanOneThousand(hundredThousands) + " thousand ";
    }
    result =  result + tradHundredThousands;
    String tradThousand;
    tradThousand = convertLessThanOneThousand(thousands);
    result =  result + tradThousand;
    return result.replaceAll("^\s+", "").replaceAll("\b\s{2,}\b", " ");
  }
}
Salin selepas log masuk

Penggunaan:

System.out.println(EnglishNumberToWords.convert(123456789));
// Output: "one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine"
Salin selepas log masuk

Kesimpulan:

Dengan penyelesaian tersuai ini, anda boleh menukar nilai berangka kepada perwakilan perkataannya dengan mudah dan cekap.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar nombor kepada perkataan dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan