我是编程新手,我从Objective C开始作为我的第一语言。 我正在搞乱一些书籍和教程,最后编写一个计算器...... 一切都很好,我正在进入(编程真的很有趣)
现在我问自己如何将阿拉伯数字翻译成中文数字 (例如阿拉伯语4是中文四,8是八,这意味着四+四=八 中国的数字系统有点不同于阿拉伯语它们有100,1000,10000和ja种类的扭曲的标志,这搞砸了我的大脑...无论如何,任何人都有一些建议,提示,技巧或解决方案,我怎么能告诉计算机如何使用这个数字,甚至如何用它们计算?
我认为一切皆有可能,所以我不会问"如果可能的话?"
答案 0 :(得分:2)
考虑维基百科http://en.wikipedia.org/wiki/Chinese_numerals描述的中国数字系统(普通话),例如:
所以诀窍是将一个数字分解为10的幂:
x = c(k)* 10 ^ k + ... + c(1)* 10 + c(0)
其中k是10的最大幂,它除以x使得商至少为1.在上面的第二个例子中,114 = 1 * 10 ^ 2 + 1 * 10 + 4.
该x = c(k)* 10 ^ k + ... + c(1)* 10 + c(0)变为[c(k)][10^k]...[c(1)][10][c(0)]
。再次在第二个例子中,114 = [1] [100] [1] [10] [4]。
然后将括号内的每个数字映射到相应的正弦图:
0 =〇
1 =一
2 =二
3 =三
4 =四
5 =五
6 =六
7 =七
8 =八
9 =九
10 =十
100 =百
1000 =千
10000 =万
只要您跟踪[c(k)][10^k]...[c(1)][10][c(0)]
表单,就可以轻松转换为计算机可以处理的整数或相应的中文数字。所以我将这个[c(k)][10^k]...[c(1)][10][c(0)]
形式存储在一个大小为k + 2的整数数组中。
答案 1 :(得分:1)
我不熟悉Objective-C,因此我无法为您提供iOS解决方案。 尽管如此,以下是Android的Java代码... 我认为它可以帮助你,也帮助了我。
double text2double(String text) {
String[] units = new String[] { "〇", "一", "二", "三", "四",
"五", "六", "七", "八", "九"};
String[] scales = new String[] { "十", "百", "千", "万",
"亿" };
HashMap<String, ScaleIncrementPair> numWord = new HashMap<String, ScaleIncrementPair>();
for (int i = 0; i < units.length; i++) {
numWord.put(units[i], new ScaleIncrementPair(1, i));
}
numWord.put("零", new ScaleIncrementPair(1, 0));
numWord.put("两", new ScaleIncrementPair(1, 2));
for (int i = 0; i < scales.length; i++) {
numWord.put(scales[i], new ScaleIncrementPair(Math.pow(10, (i + 1)), 0));
}
double current = 0;
double result = 0;
for (char character : text.toCharArray()) {
ScaleIncrementPair scaleIncrement = numWord.get(String.valueOf(character));
current = current * scaleIncrement.scale + scaleIncrement.increment;
if (scaleIncrement.scale > 10) {
result += current;
current = 0;
}
}
return result + current;
}
class ScaleIncrementPair {
public double scale;
public int increment;
public ScaleIncrementPair(double s, int i) {
scale = s;
increment = i;
}
}
答案 2 :(得分:0)
您可以使用NSNumberFormatter
。
如下面的代码,首先从中文字符中获取NSNumber
,然后将它们组合起来。
func getNumber(fromText text: String) -> NSNumber? {
let locale = Locale(identifier: "zh_Hans_CN")
let numberFormatter = NumberFormatter()
numberFormatter.locale = locale
numberFormatter.numberStyle = .spellOut
guard let number = numberFormatter.number(from: text) else { return nil }
print(number)
return number
}