Se usar %.1f para exibir uma média, por quê ele arredonda?

Prezados, espero que estejam bem
Estava fazendo uns exercícios no URI e este problema está me incomodando:

INPUT:
1 -2 3 -4 5 8
OUTPUT:
4 valores positivos
4.250000

Se eu formatar com %.1f, é arredondado para 4.3 e aí não consigo ganhar “Accepted”, teve um outro problema que resolvi através do casting mas esse eu não estou conseguindo. Já procurei sobre BigDecimal para maior precisão, mas gostaria de utilizar outra opção (se disponível).

Código:
import java.util.Scanner;
public class URI1064 {

    public static void main(String[] args) {

        Scanner scn = new Scanner(System.in);

        float number;
        float sum = 0.0f;
        int count = 0;

        for (int i = 0; i < 6; i++) {
            number = scn.nextFloat();
            if (number > 0) {
                sum += number;
                count++;
            }
        }
        float average = sum / count;
        System.out.println(count+ " valores positivos");
        System.out.printf("%.1f", average);
    }
}

Grato desde já.

voce so pode usar essa formatação? Usei %.6f e saiu o mesmo resultado que pede no output
image

2 curtidas

System.out.printf não imprime o caracter de nova linha, talvez por isso também não bata com o resultado esperado. Além de colocar o "%.6f" como já comentado.

2 curtidas

Infelizmente só aceita a formatação de uma casa após o ponto:

Exemplo de Entrada
7
-5
6
-3.4
4.6
12

Saída
4 valores positivos
7.4

E aí tem esse “bug” do Java que arredonda mas não consigo resolver com casting.

Pô, era isso mesmo. Tinha esquecido de colocar %n no printf mas ainda estou incomodado com essa precisão JAEIHASJIE
Valeu!

1 curtida

Isso não é precisão, é exatidão.