我有以下問題:我想將諸如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'方法? –