Como verificar se o numero digitado é multiplo de 0.05?

Então, eu preciso verificar se o usuario digitou um numero multiplo de 0.05, exemplo
3,25
3,30
4,25
4,30

tentei o seguinte código:

// Verificarei se o usuario está digitando um valor multiplo de 0.05
while(valorDevido % 0.05 != 0)
{
System.out.println(“Ops, por favor, digite um valor que deve pagar q seja multiplo de 0.05:”);
valorDevido = leitor.nextFloat();
}

mas se eu digito por exemplo 3,30 ele continua mostrando a mensagem

Você está tendo um problema matemático.
Divisões por números entre 1 e 0 são o mesmo que multiplicações. Por exemplo, dividir 10 por 0.5 é o mesmo que multiplicar por 2:
10.0 / 0.5 = 20.0
10.0 * 2.0 = 20.0

Então, quando o operador % funciona de maneira anormal para divisões entre 0 e 1, que é o caso de 0.05.
A solução que imagino que pode resolver seu problema é multiplicar o número por 100 e realizar a divisão por 5 ao invés de 0.05.
Assim, o que antes seria: 3.30 % 0.05
Ficaria: (3.30 * 100) % 5

Se precisar de um algoritmo mais complexo e inteligente, pode fazer uma função que verifique quantas casas decimais o número possui e multiplique por 10, 100, 1000 etc de acordo com o necessário, mas não acho tão necessário, visto que multiplicar por 100 já dá conta do escopo que tu mandou na pergunta.

Espero ter ajudado!

2 curtidas