2015-07-03 23 views
0

我有以下问题:我想将诸如1/2,3/4的分数转换为Java中的口语词,如“One half”或“Three quarters”。将分数转换为Java中的单词

是否有产生输出接收数字基本上

喜欢的东西任何方式(伪代码)或实用的Java:

getSpokenWords(numerator, denominator)返回“一半”

这将是非常赞赏。

+1

你是否让我们拥有'getSpokenWords'方法? –

回答

1

您可以简单地通过使用if-elseswitch很容易实现你的逻辑你getSpokenWords(numerator, denominator)因为你知道你的更好的投入预计为denominatornumerator,因为所有的预期投入由我们可能不值得&适合你。 您可以维护HashMap<Integer, String>denominatornumeratorIntegerdenominatornumeratorString是他们同行的Alpha值,并可以从它相应get()值。

+0

如果有效,您可以将其标记为正确 –

1

没有标准库,我知道这样做,据我所知,你不能为此做出可扩展的解决方案。

我建议的一种方法是创建数组,基本上将数字映射到他们的单词对应。例如,

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)的文本并附加“千”。当然,获得字符串“五百二十五”也需要分离。

0

到目前为止,最简单和更直接的解决方案,尤其是如果你只对感兴趣,而不是一般的是使用散列表。

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与你的情况下

1

http://www.rgagnon.com/javadetails/java-0426.html

他,你只需要编辑一个很少使用正常的数字做了他的代码为nuberator,你将需要第二个分母添加ith或第三或其他。

+0

一旦您超过前二十位,序数(分母)的结尾就会令人惊讶地规律。第一为1,第二为2,第三为3,第五为5,第八为8,第三为其他。应该很容易适应你连接到序号的代码。 –