我有以下问题:我想将诸如1/2,3/4的分数转换为Java中的口语词,如“One half”或“Three quarters”。将分数转换为Java中的单词
是否有产生输出接收数字基本上
喜欢的东西任何方式(伪代码)或实用的Java:
getSpokenWords(numerator, denominator)
返回“一半”
这将是非常赞赏。
我有以下问题:我想将诸如1/2,3/4的分数转换为Java中的口语词,如“One half”或“Three quarters”。将分数转换为Java中的单词
是否有产生输出接收数字基本上
喜欢的东西任何方式(伪代码)或实用的Java:
getSpokenWords(numerator, denominator)
返回“一半”
这将是非常赞赏。
您可以简单地通过使用if-else
或switch
很容易实现你的逻辑你getSpokenWords(numerator, denominator)
因为你知道你的更好的投入预计为denominator
和numerator
,因为所有的预期投入由我们可能不值得&适合你。 您可以维护HashMap<Integer, String>
为denominator
和numerator
,Integer
是denominator
和numerator
和String
是他们同行的Alpha值,并可以从它相应get()
值。
如果有效,您可以将其标记为正确 –
没有标准库,我知道这样做,据我所知,你不能为此做出可扩展的解决方案。
我建议的一种方法是创建数组,基本上将数字映射到他们的单词对应。例如,
String[] numerators = {"One", "Two", "Three", ... // etc., until you reach your desired limit
String[] denominators = {"whole", "hal", "third", ...
你getSpokenWords(分子,分母)方法然后可以串联这些字符串,并根据需要添加多个结局。 (“Half”由于其不规则的复数形式而被列为“hal”,因此可以根据需要连接“ves”或“f”)
编辑:如果你想要聪明,使用循环,除法和模数来将更高的数字分隔为他们的位置值。例如,525600可以分为525和600,在这里你可以得到相当于525(525)的文本并附加“千”。当然,获得字符串“五百二十五”也需要分离。
到目前为止,最简单和更直接的解决方案,尤其是如果你只对感兴趣,而不是一般的是使用散列表。
HashMap<String, String> hashmap = new HashMap<String, String>();
hashmap.put("1/2", "One half");
hashmap.put("3/4", "Three quarters"); etc
从那里所有你需要做的就是将传递的数字转换为字符串。
例如
int numerator = 1;
int denominator = 2;
String fraction = numerator + "/" + denominator;
String word = hashmap.get(fraction);
所以基本上:
public String getSpokenWords(int numerator, int denominator) {
String fraction = numerator + "/" + denominator;
String word = hashmap.get(fraction);
return word == null? "": word;
}
只需创建一个大的HashMap与你的情况下
http://www.rgagnon.com/javadetails/java-0426.html
他,你只需要编辑一个很少使用正常的数字做了他的代码为nuberator,你将需要第二个分母添加ith或第三或其他。
一旦您超过前二十位,序数(分母)的结尾就会令人惊讶地规律。第一为1,第二为2,第三为3,第五为5,第八为8,第三为其他。应该很容易适应你连接到序号的代码。 –
你是否让我们拥有'getSpokenWords'方法? –