2009-03-15 15 views
5

¿Es posible almacenar una fracción como 3/6 en una variable de algún tipo? Cuando intento esto, solo almacena los números antes de /. Sé que puedo usar 2 variables y dividirlas, pero la entrada es de un solo campo de texto. ¿Es esto posible?De Fracción a Decimal y Atrás?

Quiero hacer esto porque necesito calcular las fracciones con respecto a las cuotas decimales.

Una pregunta extra;) - ¿Hay una manera fácil de calcular un valor decimal en una fracción? Gracias ..

Respuesta

3

Lo mejor que se puede hacer es implementar una clase de fracción (o clase de número racional). Normalmente tomaría un numerador y un denominador y sería capaz de proporcionar un doble, y hacer matemáticas básicas con otros objetos de fracción. También debería ser capaz de analizar y formatear fracciones.

Rational Arithmetic on Rosetta Code parece algo bueno para empezar.

5

Bien, en resumen, no hay una manera verdadera de extraer la fracción original de un decimal.

Ejemplo: tomar 5/10

usted recibirá 0,5

ahora, 0,5 también se traduce de nuevo a 1/2, 2/4, 3/6, etc.

Su mejor apuesta es almacenar cada entero por separado, y realizar el cálculo más adelante.

3

Me temo que no hay respuestas fáciles para usted en esto. Para crear la fracción, tendrás que dividir el campo de texto en '/', convertir las dos mitades a double s, y dividirlas. En cuanto a convertirlo a una fracción, tendrás que abrir un libro de texto de matemáticas y resolverlo. (Peor aún, un doble no es realmente preciso; puede que piense que tiene 0.1, pero realmente tiene 0.09999999999999998726 o algo así, así que tendrá que elegir una precisión e ir por ello, o escribir algún tipo de fracción clase que se basa en un par de enteros).

1

¿Hay una manera fácil de calcular un valor decimal en una fracción?

Si limita sus valores decimales a un cierto número de puntos decimales se puede crear una tabla de consulta.

 
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... 

lo tanto, si la entrada del usuario 0.5 que rellenarlo con 0 hasta que llegó de 4 decimales. Luego usaría la tabla de búsqueda para devolver "1/2". La tabla de búsqueda probablemente sea un diccionario de géneros.

No sería demasiado difícil de hacer tampoco. Por ejemplo, si el usuario ingresó 0.0624, puede seleccionar fácilmente el valor en la tabla más cercana a ese decimal. En este caso, devolvería "1/16".

No deje que te asuste/ingrese el conjunto finito de pares decimales/fracciones (en realidad no es tan grande dependiendo de la precisión que elija).

Si todo lo demás falla, quizás una búsqueda en Google revele una biblioteca que hace este tipo de esto por usted.

+0

Hrm ... ¿Por qué los votos a favor? – user72491

3

El método, como se ha dicho, es almacenar el numerador y el denominador, de forma muy similar a como lo puede escribir en papel.

de 'C' utilizar el aspecto

GNU Multiple Precision Arithmetic Library

de 'racional' en la documentación.

+0

La pregunta está etiquetada C, sí. Sin embargo, creo que el autor cometió un error y pensó que Obj-C y C están relacionados. Aún así, una respuesta útil. +1. – strager

+0

@strager: Objective-C y C están relacionados, en eso uno es un superconjunto estricto del otro. GMP se puede usar con Obj-C, aunque es probable que sea excesivo para esto. –

Cuestiones relacionadas