Как изменить точность поплавка с одного десятичного на n десятичных знаков [duplicate]

CSS:

  #container {width: 100%;  высота: 100vh;  } # container.footer {float: left;  ширина: 100%;  высота: 20vh;  Запас-топ: 80vh;  фон-цвет: красный;  }  

HTML:

  & lt; div id = "container" & gt;  & lt; div class = "footer" & gt;  & Lt; / дел & GT;  & Lt; / дел & GT;   

Это должно сделать трюк, если вы ищете отзывчивый нижний колонтитул, выровненный в нижней части страницы, который всегда держит верхний край 80% высоты окна просмотра.

135
задан royhowie 5 November 2014 в 07:56
поделиться

12 ответов

Вы можете использовать метод printf , например:

System.out.printf("%.2f", val);

Короче говоря, синтаксис %.2f говорит Java о возврате вашей переменной (val ) с 2 десятичными знаками (.2) в десятичном представлении числа с плавающей запятой (f) с начала спецификатора формата (%).

Существуют другие символы преобразования, которые вы может использовать кроме f:

  • d: десятичное целое
  • o: восьмеричное целое
  • e: с плавающей запятой в научной нотации
182
ответ дан JoeYo 15 August 2018 в 14:55
поделиться
  • 1
    Будьте осторожны, так как String.format зависит от вашей текущей локальной конфигурации, вы можете не получить точку в качестве разделителя. Предпочитают использовать String.format(java.util.Locale.US,"%.2f", val); – Gomino 2 March 2016 в 17:59
  • 2
    @gomino Почему бы не Locale.FRANCE? – erickson 27 May 2016 в 20:17
  • 3
    @erickson во Франции десятичный разделитель - это запятая, а не точка. – Gomino 27 May 2016 в 20:22
  • 4
    @gomino Точно. Так почему бы вы поместили точки в числа для французских пользователей? – erickson 27 May 2016 в 20:27
  • 5
    @gomino Это имеет смысл, но я думаю, что «предпочитаю». жесткое кодирование Locale.US заходит слишком далеко. Если вам нужно жестко закодировать «нейтральный», локали для фальцовки фраз, рендеринга чисел и т. д., укажите Locale.ROOT. Это было бы уместно для текста, который будет потребляться другой программой, а не для человеческих пользователей. Для текста, представленного пользователю, почитайте их язык, независимо от того, указали ли они его явно или по умолчанию. – erickson 27 May 2016 в 20:37

Многие люди упоминали DecimalFormat. Но вы также можете использовать printf, если у вас есть последняя версия Java:

System.out.printf("%1.2f", 3.14159D);

Подробнее о строке формата printf см. В документах в Formatter.

8
ответ дан Bozho 15 August 2018 в 14:55
поделиться

Простой трюк состоит в том, чтобы сгенерировать более короткую версию вашей переменной, умножив ее, например. 100, округляя его и снова разделив на 100.0. Таким образом, вы создаете переменную с двумя десятичными знаками:

double new_variable = Math.round(old_variable*100) / 100.0;

Этот «дешевый трюк» всегда был для меня хорошим и работал на любом языке (я не человек Java, просто изучая его ).

6
ответ дан felipe.zkn 15 August 2018 в 14:55
поделиться
  • 1
    Это неправильно, многие числа будут повторять числа в поплавком представлении после того, как вы разделите его на 100. Следовательно, не два десятичных знака. – matt 29 March 2016 в 08:54

Я бы предложил использовать String.format () , если вам нужно значение в качестве String в вашем коде.

Например, вы можете использовать String.format() следующим образом:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
66
ответ дан John P. 15 August 2018 в 14:55
поделиться
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
34
ответ дан Kevin Sylvestre 15 August 2018 в 14:55
поделиться
  • 1
    Привет, Кевин, если при входе в 10.0000 я получаю только 10. Если я хочу отображать 10.00, то как я могу это сделать? – Mdhar9e 26 August 2014 в 13:26
  • 2
    @ Mdhar9e использовать DecimalFormat df = new DecimalFormat("0.00"); – K. Sopheak 28 December 2016 в 02:57

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

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);
    }
}
1
ответ дан Mahmoud Adam 15 August 2018 в 14:55
поделиться
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

Выход равен 22.35. Если вам нужно 3 десятичных точки, измените его на «% .3f».

4
ответ дан Patrice Gahide 15 August 2018 в 14:55
поделиться

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

0
ответ дан Paul Efford 15 August 2018 в 14:55
поделиться
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
10
ответ дан Phan Van Linh 15 August 2018 в 14:55
поделиться
  • 1
    В зависимости от локали вы можете получить запятую. Если вам нужен разделитель точек, используйте это: DecimalFormat (& quot; #. ## & quot ;, DecimalFormatSymbols (Locale.US)) – DPM 15 September 2017 в 10:17

Вы можете использовать DecimalFormat . Один из способов его использования:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

Еще один способ - построить его с использованием формата #.##.

Я считаю, что все параметры форматирования менее читабельны, чем вызов методов форматирования, но это вопрос предпочтения.

137
ответ дан poitroae 15 August 2018 в 14:55
поделиться
  • 1
    Что произошло с синтаксисом System.out.printf("%.2f", value)? Это все еще вокруг? – Anthony Forloney 29 March 2010 в 15:49
  • 2
    это. это все еще вариант - вы можете восстановить свой ответ;) – Bozho 29 March 2010 в 15:51
  • 3
    Похоже, это мой вариант, так как я еще не знаю, как использовать DecimalFormat :) Спасибо! – via_point 29 March 2010 в 15:55
  • 4
    Я долго не занимался обширной работой Java, и когда я продолжал видеть ответы DecimalFormat, я сразу подумал, что ошибаюсь, но спасибо, что разъяснил это. – Anthony Forloney 29 March 2010 в 15:56
  • 5
    добавьте df.setMinimumFractionDigits(2);, чтобы заставить две цифры – Terel 19 March 2014 в 23:09

Посмотрите на DecimalFormat

Вот пример из учебника:

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);

Если вы выберете шаблон типа "###. # # ", вы получите два десятичных знака, и я думаю, что значения округлены. Вы захотите посмотреть ссылку, чтобы получить точный формат, который вы хотите (например, хотите ли вы иметь нулевые нули)

4
ответ дан Uri 15 August 2018 в 14:55
поделиться

OK - str для плавания.

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)
2
ответ дан YumYumYum 15 August 2018 в 14:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: