从分数到十进制和后退?

时间:2009-03-15 23:12:30

标签: iphone c objective-c

是否可以在某种变量中存储3/6的分数? 当我尝试这个时它只存储/之前的数字。我知道我可以使用2个变量并将它们分开,但输入来自单个文本字段。这有可能吗?

我想这样做是因为我需要将分数计算为小数赔率。

奖金问题;) - 有一种简单的方法来计算分数的十进制值吗?感谢..

5 个答案:

答案 0 :(得分:5)

简而言之,没有真正的方法可以从小数中提取原始分数。

示例:采取5/10

你会得到0.5

现在,0.5也可以转换为1 / 2,2 / 4,3 / 6等。

最好的办法是分别存储每个整数,然后再进行计算。

答案 1 :(得分:3)

我担心你没有任何简单的答案。要创建分数,您必须将文本字段拆分为“/”,将两半转换为double,然后将它们分开。至于将它转换回一个分数,你将不得不打开一本数学教科书并弄清楚。 (更糟糕的是,双精度实际上并不精确 - 你可能认为它有0.1,但它确实有0.09999999999999998726或类似的东西,所以你必须选择一个精度并去寻找它,或写一些分数基于一对整数的类。)

答案 2 :(得分:3)

最好的办法是实现一个分数类(或有理数字类)。通常它需要分子和分母并且能够提供双精度,并且与其他分数对象进行基本数学运算。它还应该能够解析和格式化分数。

Rational Arithmetic on Rosetta Code看起来很不错。

答案 3 :(得分:3)

如上所述,该方法是存储分子和分母,就像你可以在纸上书写一样。

表示'C'使用

GNU Multiple Precision Arithmetic Library

在文档中寻找'理性'。

答案 4 :(得分:1)

  
    

有一种简单的方法可以计算分数的十进制值吗?

  

如果将小数值限制为一定数量的小数点,则可以创建查找表。

0.3333, 1/3
0.6666, 2/3
0.0625, 1/16
0.1250, 1/8
0.2500, 1/4
0.5000, 1/2
0.7500, 3/4
etc...

因此,如果用户输入0.5,则用0填充它,直到得到4位小数。然后,您将使用查找表返回“1/2”。查找表可能应该是各种字典。

估算任何一项都不会太困难。例如,如果用户输入0.0624,则可以轻松选择最接近该小数的表中的值。在这种情况下,它将返回“1/16”。

不要让有限的十进制/分数对的输入/输入吓到你(根据你选择的精度,它真的不是那么大)。

如果所有其他方法都失败了,谷歌搜索可能会显示一个库,可以为您执行此类操作。