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:
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", " "); } }
System.out.println(EnglishNumberToWords.convert(123456789)); // Output: "one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine"
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!