Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

121
Vistas
Entrada de formulario de Ruby on Rails que cambia de entero a decimal

He heredado una aplicación de Ruby on Rails que usa la gema de administración para un panel de administración.

Este proyecto incluye un modelo de producto, y cada producto tiene un precio de caja al por mayor. Este campo se llama wholesale_case_price_cents y es un número entero. Todos los precios en la aplicación se manejan como números enteros.

El problema que encuentro es que algunos números, cuando se ingresan en el campo de entrada del panel de administración, se convierten en un decimal. Por ejemplo, si ingreso el número entero 3780, el valor de entrada cambia automáticamente a 3779.9999999999995. Ver captura de pantalla:

ingrese la descripción de la imagen aquí

Como puede ver, el valor de entrada se cambia automáticamente antes del envío. No hace esto para cada número, solo para algunos: ingrese la descripción de la imagen aquí

La aplicación también utiliza la gema de administración de dinero de campo, la gema de rieles de dinero y la gema de monetización. Sospecho que es la gema de administrar-campo-dinero la que causa el problema, pero no sé cómo solucionarlo, salvo eliminar la gema. ¿Alguien más se encuentra con este problema?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Parece un problema en el problema de JavaScript de administrate-field-money en esta línea

 return $el.maskMoney('unmasked')[0] * 100;

Y cuando el valor es 37.80:

37,80 × 100 = 3779,9999999999995

Así es como funcionan los flotadores en muchos idiomas

Hay otra sucursal . Y ahí

 Math.round($el.maskMoney('unmasked')[0] * 100)

Esto devolverá 3780

Probablemente necesite actualizar esta versión de gema, o especificar una rama en github en su Gemfile o de alguna manera parchear este archivo JS

about 4 years ago · Santiago Trujillo Denunciar

0

Como se mencionó en otras respuestas, esto se debe a las matemáticas de punto flotante en el JS proporcionado por su biblioteca.

Una forma sencilla de resolverlo es desinfectar los parámetros enviados en Ruby. Usted sabe que las matemáticas de coma flotante producirán flotantes que están muy cerca del número entero que deben representar. Por lo tanto, en sus controladores podría hacer esto:

 price = params[:product][:wholesale_case_price_cents].round()
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda