Как получить целые и дробные части из двойного в JSP / Java? - PullRequest
88 голосов
/ 05 декабря 2008

Как получить целые и дробные части из double в JSP / Java? Если значение 3,25, то я хочу получить fractional =.25, whole = 3

Как мы можем сделать это на Java?

Ответы [ 17 ]

0 голосов
/ 04 сентября 2016
String value = "3.06";

if(!value.isEmpty()){
    if(value.contains(".")){    
        String block = value.substring(0,value.indexOf("."));
        System.out.println(block);
    }else{
        System.out.println(value);
    }
}
0 голосов
/ 22 декабря 2015

Я бы использовал BigDecimal для решения. Как это:

    double value = 3.25;
    BigDecimal wholeValue = BigDecimal.valueOf(value).setScale(0, BigDecimal.ROUND_DOWN);
    double fractionalValue = value - wholeValue.doubleValue();
0 голосов
/ 27 октября 2015

Начиная с Java 8, вы можете использовать Math.floorDiv.

Возвращает наибольшее (ближайшее к положительной бесконечности) значение int, которое меньше или равно алгебраическому частному.

Некоторые примеры:

floorDiv(4, 3) == 1
floorDiv(-4, 3) == -2

В качестве альтернативы можно использовать оператор /:

(4 / 3) == 1
(-4 / 3) == -1

Ссылки:

0 голосов
/ 07 августа 2015

Принятый ответ не работает для отрицательных чисел от -0 до -1.0 Также дайте дробную часть отрицательной.

Например: Для номера -0,35

возвращает

Целочисленная часть = 0 Дробная часть = -0,35

Если вы работаете с GPS-координатами, лучше получить результат со знаком в целочисленной части как:

Целочисленная часть = -0 Дробная часть = 0,35

Номера тезисов используются, например, для координат GPS, где важен знак для широты или долготы

Код предложения:

    double num;
    double iPart;
    double fPart;

    // Get user input
    num = -0.35d;
    iPart = (long) num;
    //Correct numbers between -0.0 and -1.0
    iPart = (num<=-0.0000001 && num>-1.0)? -iPart : iPart ;
    fPart = Math.abs(num - iPart);
    System.out.println(String.format("Integer part = %01.0f",iPart));
    System.out.println(String.format("Fractional part = %01.04f",fPart));

Выход:

Integer part = -0
Fractional part = 0,3500
0 голосов
/ 05 сентября 2014

Многие из этих ответов имеют ужасные ошибки округления, потому что они приводят числа от одного типа к другому. Как насчет:

double x=123.456;
double fractionalPart = x-Math.floor(x);
double wholePart = Math.floor(x);
0 голосов
/ 10 марта 2010

Так как тег fmt:formatNumber не всегда дает правильный результат, здесь есть еще один подход только для JSP: он просто форматирует число как строку и выполняет остальную часть вычисления в строке, поскольку это проще и не не включать дальнейшую арифметику с плавающей запятой.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<%
  double[] numbers = { 0.0, 3.25, 3.75, 3.5, 2.5, -1.5, -2.5 };
  pageContext.setAttribute("numbers", numbers);
%>

<html>
  <body>
    <ul>
      <c:forEach var="n" items="${numbers}">
        <li>${n} = ${fn:substringBefore(n, ".")} + ${n - fn:substringBefore(n, ".")}</li>
      </c:forEach>
    </ul>
  </body>
</html>
0 голосов
/ 06 апреля 2009
public class MyMain2 {
    public static void main(String[] args) {
        double myDub;
        myDub=1234.5678;
        long myLong;
        myLong=(int)myDub;
        myDub=(myDub%1)*10000;
        int myInt=(int)myDub;
        System.out.println(myLong + "\n" + myInt);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...