2011-04-08 6 views

Respuesta

6

Se puede utilizar un FractionBox con DisplayForm:

setDenominator[x_, d_] := DisplayForm[FractionBox[x*d, d]] 
+0

+1 Tu sugerencia funciona muy bien para las fracciones, incluso cuando el denominador no está bien elegido: por ejemplo 'setDenominator [1/3, 5]'. – DavidC

+0

Hice una variación de su solución que permite agregar y multiplicar las fracciones. – DavidC

0

alternativo para sakra ejemplo sería la de almacenar el valor en la cadena:

setDenominator[x_, d_] := ToString[x d] <> "/" <> ToString[d]; 
4

HoldForm obras, pero hay que ser astuto para obtener el valor numérico de x*d allí

setDenominator[x_, d_] := [email protected][foo, d] /. foo -> x*d 

Esto se puede mejorar agregando algunos controles para la idoneidad de d.

4

Aquí hay una variación en la idea de Sakra que permite la adición y multiplicación ...

Format[setDenominator[x_, d_]] := [email protected][x*d, d] 
setDenominator /: Plus[left___, setDenominator[x1_, d1_], right___] := left + x1 + right; 
setDenominator /: Times[left___, setDenominator[x1_, d1_], right___] :=left*x1*right; 

Ponerlo a prueba:

a = setDenominator[3/5, 10]; 
Print[a, " + ", 2/3, " = " , a + 2/3] 
Print[a, " + ", 2/3, " = " , setDenominator[a + 2/3, 30]] 
Print[a, " × ", 2/3, " = " , a * 2/3] 
Print[a, " × ", 2/3, " = " , setDenominator[a * 2/3, 30]] 
Print[a, " ÷ ", 2/3, " = " , a /(2/3)] 

addition, multiplication, division

+0

@Qiang Li Agregué un código que te permite agregar y multiplicar fracciones sin reducir. setDenominator se basa en la rutina de sakra. El truco de los upvalues ​​es algo que aprendí de Leonid. [http://stackoverflow.com/questions/5200617/how-can-i-make-a-working-repeating-decimal-representation-of-a-rational-number] – DavidC

+0

@David, +1 ¡y esto es lindo! –

+0

@Qiang Li Gracias, me alegra que te haya gustado. – DavidC

Cuestiones relacionadas