Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

128
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda