Java 如何将支票转换为包含小数点位置的单词
我被指派编写一个方法,该方法的货币值小于$1000.00,并编写与该金额相等的单词。该金额还需要包括小数点后的部分(基本上是金额的变动部分)。Java 如何将支票转换为包含小数点位置的单词,java,arrays,string,currency,Java,Arrays,String,Currency,我被指派编写一个方法,该方法的货币值小于$1000.00,并编写与该金额相等的单词。该金额还需要包括小数点后的部分(基本上是金额的变动部分)。 i、 e 我看到这个话题已经被讨论过很多次了,但我似乎找不到任何关于我所要求的信息。我是新来的(4周),所以如果我问错了问题或以错误的方式陈述了我所做的事情,请原谅我。我可以用文字输出金额(正如你从我的结果中看到的),但我相信我遇到的问题在于用户输入了一个Double,我的代码不包括任何请求尝试以下方法: public class CheckToWord
i、 e 我看到这个话题已经被讨论过很多次了,但我似乎找不到任何关于我所要求的信息。我是新来的(4周),所以如果我问错了问题或以错误的方式陈述了我所做的事情,请原谅我。我可以用文字输出金额(正如你从我的结果中看到的),但我相信我遇到的问题在于用户输入了一个Double,我的代码不包括任何请求尝试以下方法:
public class CheckToWord {
public static void main(String[] args) { //main method
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter the check amount:"); //prompt user to enter check amount
double number = scanner.nextDouble();
String[] parsed = parse(Double.toString(number));
int main = Integer.parseInt(parsed[0]);
int change = Integer.parseInt(parsed[1]);
if (main == 0 && change == 0) {
System.out.print("Zero");
} else {
String mwm = moneyWord(main);
String mwc = moneyWord(change);
System.out.println("" + mwm + " and " + mwc + " cents");
}
}
private static String[] parse(String number) {
String[] split = number.contains(".") ? number.split(Pattern.quote(".")) : new String[]{number, "00"};
String main = split[0];
String change = split[1].length() >= 2 ? split[1].substring(0, 2) :
split[1].length() == 1 ? split[1] + "0" : "00";
return new String[]{main, change};
}
private static String moneyWord(int number) {
if(number > 1000) {
throw new IllegalArgumentException("Number value should be less than 1000");
}
String words = ""; // variable to hold string representation of number
String onesArray[] = {"zero", "one", "two", "three", "four", "five", "six",
"seven", "eight", "nine", "ten", "eleven", "twelve",
"thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
"eighteen", "nineteen"};
String tensArray[] = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"};
if (number < 0) { // convert the number to a string
String numberStr = "" + number;
numberStr = numberStr.substring(1); // remove minus before the number
return "minus " + moneyWord((int) Double.parseDouble(numberStr)); // add minus before the number and convert the rest of number
}
if ((number / 1000) > 0) { // check if number is divisible by 1 thousand
words += moneyWord(number / 1000) + " thousand ";
number %= 1000;
}
if ((number / 100) > 0) { // check if number is divisible by a hundred
words += moneyWord(number / 100) + " hundred ";
number %= 100;
}
if (number < 20) { // check if number is within the teens
words += onesArray[number]; // get the appropriate value from ones array
} else {
words += tensArray[number / 10]; // get the appropriate value from tens array
if ((number % 10) > 0) {
words += "-" + onesArray[number % 10];
}
}
return words;
}
}
试试这个:
public class CheckToWord {
public static void main(String[] args) { //main method
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter the check amount:"); //prompt user to enter check amount
double number = scanner.nextDouble();
String[] parsed = parse(Double.toString(number));
int main = Integer.parseInt(parsed[0]);
int change = Integer.parseInt(parsed[1]);
if (main == 0 && change == 0) {
System.out.print("Zero");
} else {
String mwm = moneyWord(main);
String mwc = moneyWord(change);
System.out.println("" + mwm + " and " + mwc + " cents");
}
}
private static String[] parse(String number) {
String[] split = number.contains(".") ? number.split(Pattern.quote(".")) : new String[]{number, "00"};
String main = split[0];
String change = split[1].length() >= 2 ? split[1].substring(0, 2) :
split[1].length() == 1 ? split[1] + "0" : "00";
return new String[]{main, change};
}
private static String moneyWord(int number) {
if(number > 1000) {
throw new IllegalArgumentException("Number value should be less than 1000");
}
String words = ""; // variable to hold string representation of number
String onesArray[] = {"zero", "one", "two", "three", "four", "five", "six",
"seven", "eight", "nine", "ten", "eleven", "twelve",
"thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
"eighteen", "nineteen"};
String tensArray[] = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"};
if (number < 0) { // convert the number to a string
String numberStr = "" + number;
numberStr = numberStr.substring(1); // remove minus before the number
return "minus " + moneyWord((int) Double.parseDouble(numberStr)); // add minus before the number and convert the rest of number
}
if ((number / 1000) > 0) { // check if number is divisible by 1 thousand
words += moneyWord(number / 1000) + " thousand ";
number %= 1000;
}
if ((number / 100) > 0) { // check if number is divisible by a hundred
words += moneyWord(number / 100) + " hundred ";
number %= 100;
}
if (number < 20) { // check if number is within the teens
words += onesArray[number]; // get the appropriate value from ones array
} else {
words += tensArray[number / 10]; // get the appropriate value from tens array
if ((number % 10) > 0) {
words += "-" + onesArray[number % 10];
}
}
return words;
}
}
另一种从全部金额中分离变化的可能性如下
double[]vals={22.451222.01222.972900.98
};
用于(双val:val){
整数=(整数)val;
//得到余数,乘以100,再加上.5进行四舍五入
//在铸造之前。
整数变化=(整数)((val%1)*100+.5);
//如果更改为0,则在适当位置使用xx
System.out.printf(“%7.2f:%5d和%s/100%n”,
瓦尔,
整体
(更改==0)?“xx”
:change+“”);
}
将零钱从全部金额中分离出来的另一种可能性如下
double[]vals={22.451222.01222.972900.98
};
用于(双val:val){
整数=(整数)val;
//得到余数,乘以100,再加上.5进行四舍五入
//在铸造之前。
整数变化=(整数)((val%1)*100+.5);
//如果更改为0,则在适当位置使用xx
System.out.printf(“%7.2f:%5d和%s/100%n”,
瓦尔,
整体
(更改==0)?“xx”
:change+“”);
}
好的,如果我理解正确,您有一个编译错误。发布包含错误的代码。从编译器发布准确完整的错误消息。告诉错误消息所指的代码行。此外,请解释如果需要整数,为什么要求双精度。如果目标是转换dcimal数字,为什么需要整数。1523.23是无效输入,因为该值应小于1000美元。00@MartínZaragoza感谢您这么快的回复。现在我想回去复制错误,以便发布它们。我知道我输入的金额超过1000.00美元,但我想我可能需要说明,用户只输入了少于1k美元的金额。我还将尝试您发布到我的代码中的输入。请继续收看,太好了。进展如何?它对您有用吗?@JBNizet如果我将moneyWord方法中的int number改为Double,则第45、48和50行中的数字表示“类型不匹配:无法从Double转换为int”。但在审查了马丁发布的内容后,问题还不止这些。因为我需要修改代码的所有3个方法以及一个If语句。正如我前面提到的,有一些事情我们还没有涉及,我正试图自己弄清楚,即数组和解析。再次感谢您的帮助。好的,如果我理解正确,您有一个编译错误。发布包含错误的代码。从编译器发布准确完整的错误消息。告诉错误消息所指的代码行。此外,请解释如果需要整数,为什么要求双精度。如果目标是转换dcimal数字,为什么需要整数。1523.23是无效输入,因为该值应小于1000美元。00@MartínZaragoza感谢您这么快的回复。现在我想回去复制错误,以便发布它们。我知道我输入的金额超过1000.00美元,但我想我可能需要说明,用户只输入了少于1k美元的金额。我还将尝试您发布到我的代码中的输入。请继续收看,太好了。进展如何?它对您有用吗?@JBNizet如果我将moneyWord方法中的int number改为Double,则第45、48和50行中的数字表示“类型不匹配:无法从Double转换为int”。但在审查了马丁发布的内容后,问题还不止这些。因为我需要修改代码的所有3个方法以及一个If语句。正如我前面提到的,有一些事情我们还没有涉及,我正试图自己弄清楚,即数组和解析。再次感谢你的帮助。谢谢你的帮助。我得跑了。正如我在上面的评论中提到的,我进入了类-数组和解析中尚未涉及的领域。这是一门在线课程,有点困难,但它开始出现了。谢谢你的帮助。我得跑了。正如我在上面的评论中提到的,我进入了类-数组和解析中尚未涉及的领域。虽然这是一门在线课程,但它已经开始出现了。
Please enter the check amount:
1523.23
one thousand five hundred twenty-three
public class CheckToWord {
public static void main(String[] args) { //main method
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter the check amount:"); //prompt user to enter check amount
double number = scanner.nextDouble();
String[] parsed = parse(Double.toString(number));
int main = Integer.parseInt(parsed[0]);
int change = Integer.parseInt(parsed[1]);
if (main == 0 && change == 0) {
System.out.print("Zero");
} else {
String mwm = moneyWord(main);
String mwc = moneyWord(change);
System.out.println("" + mwm + " and " + mwc + " cents");
}
}
private static String[] parse(String number) {
String[] split = number.contains(".") ? number.split(Pattern.quote(".")) : new String[]{number, "00"};
String main = split[0];
String change = split[1].length() >= 2 ? split[1].substring(0, 2) :
split[1].length() == 1 ? split[1] + "0" : "00";
return new String[]{main, change};
}
private static String moneyWord(int number) {
if(number > 1000) {
throw new IllegalArgumentException("Number value should be less than 1000");
}
String words = ""; // variable to hold string representation of number
String onesArray[] = {"zero", "one", "two", "three", "four", "five", "six",
"seven", "eight", "nine", "ten", "eleven", "twelve",
"thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
"eighteen", "nineteen"};
String tensArray[] = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"};
if (number < 0) { // convert the number to a string
String numberStr = "" + number;
numberStr = numberStr.substring(1); // remove minus before the number
return "minus " + moneyWord((int) Double.parseDouble(numberStr)); // add minus before the number and convert the rest of number
}
if ((number / 1000) > 0) { // check if number is divisible by 1 thousand
words += moneyWord(number / 1000) + " thousand ";
number %= 1000;
}
if ((number / 100) > 0) { // check if number is divisible by a hundred
words += moneyWord(number / 100) + " hundred ";
number %= 100;
}
if (number < 20) { // check if number is within the teens
words += onesArray[number]; // get the appropriate value from ones array
} else {
words += tensArray[number / 10]; // get the appropriate value from tens array
if ((number % 10) > 0) {
words += "-" + onesArray[number % 10];
}
}
return words;
}
}
Please enter the check amount:
10.25
ten and twenty-five cents