Forum: Rails-ES Problema con datos numericos

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2009-05-13 18:19
Hola, la aplicacion que estamos ealizando tiene que ser capaz de
calcular los intereses brutos, netos y el importe a vencimiento a partir
de una serie de datos: el dinero a invertir, el tiempo de inversion y el
TAE.

Para ello en el modelo tengo la siguiente funcion:

def calcula_tin_bruto_neto_vencimiento(dinero = 0, tae = 0, meses = 0)
    # tin=interes nominal--->http://es.wikipedia.org/wiki/Inter%C3%A9s
    #n=Fraccion en que el interes va a ser aplicado
    #una vez al mes->12 al año, n=12
    #una vez cada 6 meses->2 al año, n=6

    self.dinero_a_invertir == BigDecimal.new("dinero") if dinero > 0
    self.meses == BigDecimal.new("meses") if meses > 0
    self.tae == BigDecimal.new("tae") if tae > 0

    n=12/self.meses
    #raise n.inspect
    tin1=(1+(self.tae/100))**(1/n)
    ------->raise tin1.inspect
    tin =(tin1-1)*n
    self.intereses_brutos
=self.dinero_a_invertir*(tin/100)*(self.meses/12)
    self.intereses_netos=self.intereses_brutos-(self.intereses_brutos*0.18)
   self.importe_a_vencimiento=self.dinero_a_invertir+self.intereses_netos
    self.save
end





El problema lo tengo en la linea que marco con -------> el raise me saca
este resultado:

#<BigDecimal:4038118,'0.1E1',4(24)> es decir 0.1E1=1

Sin embargo haciendolo con excel el resultado es de 1.018... El problema
es que en la siguiente linea le resto la unidad pues todos los calculos
dejan de servir.

He mirado en la documentacion de ruby:
http://www.ruby-doc.org/stdlib/libdoc/bigdecimal/r...
y se supone que debe servir para casos en los que los decimales son
parte importante.
4abebd2f6659dd76c634dd9f48c24a3f?d=identicon&s=25 David Arango (Guest)
on 2009-05-13 18:32
(Received via mailing list)
2009/5/13 Jose vicente Ribera pellicer
<ruby-forum-incoming@andreas-s.net>:
>    tin1=(1+(self.tae/100))**(1/n)

Yo diría que que en algún punto del cálculo se está haciendo un cast
de self.tae a entero ¿puedes probar así?:

tin1=(1.0+(self.tae/100.0))**(1.0/n.to_f)

Creo que en general te sirve con floats, puedes pasar de BigDecimal
¿no?.

Haz pruebas en irb de éstos cálculos, ahorras tiempo seguro.
Cb1e5ab82814fa5c0be3a10538841ce8?d=identicon&s=25 Gaizka (Guest)
on 2009-05-14 10:02
(Received via mailing list)
El día 13/05/09 18:19 +0200, Jose vicente Ribera pellicer escribió:
>     #una vez al mes->12 al año, n=12
>     #una vez cada 6 meses->2 al año, n=6
>
>     self.dinero_a_invertir == BigDecimal.new("dinero") if dinero > 0
>     self.meses == BigDecimal.new("meses") if meses > 0
>     self.tae == BigDecimal.new("tae") if tae > 0

Deberías de probar con:
self.dinero_a_invertir == BigDecimal.new(dinero) if dinero > 0

(Fíjate en las comillas)

-- Gaizka
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2009-05-14 16:07
El problema era que estaba haciendo cast.  He puesto las instrucciones
como deci Daid y hemos tocado la especificacion de la tabla ajustando
los valores de precision y scale de los datos decimales.

S2
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2009-05-14 19:00
Como decia anteriormente ya consigo que en la tabla aparezcan los datos
con dos decimales. Con el metodo number_with_precision(dato, numero de
decimales a mostrar) no hay mas problema.

Ahora me han pedido que los digitos aparezcan con la coma de los
millares, es decir en vez de 10000.45 deberia aparecer 10,000.45. He
estado anvegando y por el momento no he encontrado ninguna funcion que
lo implemente. Si alguien sabe de alguna se lo agradeceria.

S2
Fbef10e8904c80c015dce56f3fa09bea?d=identicon&s=25 Sergio Cambra .:: entreCables S.L. ::. (Guest)
on 2009-05-15 09:03
(Received via mailing list)
On Jueves, 14 de Mayo de 2009 19:00:00 Jose vicente Ribera pellicer
escribió:
> Como decia anteriormente ya consigo que en la tabla aparezcan los datos
> con dos decimales. Con el metodo number_with_precision(dato, numero de
> decimales a mostrar) no hay mas problema.
>
> Ahora me han pedido que los digitos aparezcan con la coma de los
> millares, es decir en vez de 10000.45 deberia aparecer 10,000.45. He
> estado anvegando y por el momento no he encontrado ninguna funcion que
> lo implemente. Si alguien sabe de alguna se lo agradeceria.
>
> S2

La misma funcion number_with_precision te permite hacerlo:
number_with_precision(10000.45325, :precision => 2, :separator => ',',
:delimiter => '.')
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2009-05-15 10:46
>
> La misma funcion number_with_precision te permite hacerlo:
> number_with_precision(10000.45325, :precision => 2, :separator => ',',
> :delimiter => '.')


Usando este helper asi me han salido una serie de erores, finalmente
mirando un poco el api me ha funcionado implementandolo de esta forma (
la Api vieja):

#Primero calculo el dato con precision 2
<%-dato= number_with_precision(dato,2)   %>
#Le doy el aspecto visual que me interesa
<td style="text-align:right;"><%= number_with_delimiter(dato, ".", ",")
%></td>


por si alguien puede estar interesado en el tema dejo la direccion:
http://api.rubyonrails.org/classes/ActionView/Help...

S2
This topic is locked and can not be replied to.