Как отобразить вывод данных с плавающей запятой с 2 ​​десятичными знаками в Java? - PullRequest
161 голосов
/ 29 марта 2010

Могу ли я сделать это с System.out.print?

Ответы [ 14 ]

3 голосов
/ 05 июня 2012

ОК - строка с плавающей точкой.

package test;

import java.text.DecimalFormat;

public class TestPtz {
  public static void main(String[] args) {
    String preset0 = "0.09,0.20,0.09,0.07";
    String[] thisto = preset0.split(",");    
    float a = (Float.valueOf(thisto[0])).floatValue();
    System.out.println("[Original]: " + a);   
    a = (float) (a + 0.01);

    // Part 1 - for display / debug
    System.out.printf("[Local]: %.2f \n", a);
    // Part 2 - when value requires to be send as it is
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(2);
    df.setMaximumFractionDigits(2);
    System.out.println("[Remote]: " + df.format(a));

  }
}

Выход:

run:
[Original]: 0.09
[Local]: 0.10 
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
1 голос
/ 10 апреля 2018

Просто сделайте String str = System.out.printf("%.2f", val).replace(",", ".");, если хотите убедиться, что независимо от языкового стандарта пользователя, вы всегда получите / отобразите «.» в качестве десятичного разделителя. Это необходимо, если вы не хотите, чтобы ваша программа вылетала, если позже вы выполните какое-то преобразование, например float f = Float.parseFloat(str);

1 голос
/ 27 мая 2016

маленькая простая программа для демонстрации:

import java.io.*;
import java.util.Scanner;

public class twovalues {

    public static void main(String args[]) {

        float a,b;
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter Values For Calculation");

        a=sc.nextFloat();
        b=sc.nextFloat();

        float c=a/b;
        System.out.printf("%.2f",c);
    }
}
0 голосов
/ 15 мая 2019

Одна проблема, с которой у меня был час или более, на DecimalFormat - он по-разному обрабатывает двойные и плавающие входы. Даже изменение RoundingMode не помогло. Я не эксперт, но думал, что это может помочь кому-то, как я. Закончилось использованием Math.round вместо. Смотрите ниже:

    DecimalFormat df = new DecimalFormat("#.##");
    double d = 0.7750;
    System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
    float f = 0.7750f;
    System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
    // change the RoundingMode
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
    System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));

Выход:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
...