Separar parte inteira da fracionaria

Gostaria de saber como pegar somente a parte fracionaria(depois na virgula) de uma variável do tipo double??

Já tentei subtrair a parte interia da fracionaria nao deu certo…, nao sei porque, deveria ter funcionado…

double parte_inteira = (int) v_double;

double frac = v_Double - inteira

Alguem sabe se existe algum metodo que me retorne isto???

Obrigado.

double a = 1000.9d; double d = a % ((int) a);

ou

double a = 999.99d; double d = a - ((int) a);

tambem tive esta duvida esses dias

Essas abordagens não funcionam porque double não trabalha com precisão. O objetivo dele é aqueles cálculos científicos em que a velocidade é mais importante do que o número exato.

Se você tiver sempre o mesmo número de casas decimais, o mais prático é simplesmente multiplicar por 10 elevado ao número de casas e aí trabalhar com números inteiros.
A classe usada para fazer cálculos com double é a BigDecimal, mas não tem nenhum método pronto para isso que você está querendo.
Outra idéia é passar o double para String e aí manipulá-lo como String mesmo.
Alguém tem mais alguma sugestão?

Primeiro vc converte a variavel de double para String. > toString()

Depois use o método > indexOf(".") para achar em qual posicao está o ponto.

Depois com o metodo > substring(indice inicial, indice final) voce pega o que estiver antes do ponto e depois do ponto.

Daí é só converter novamente.

Espero ter ajudado :slight_smile:

Com esse código você conseguira pegar a parte fracionada de uma forma mais simples:

public class Teste {
	public static void main ( String args[] )
	{
		double val = 1.55;
		int inteiro;
		double resto;

		inteiro = (int)(val);
		resto = val - inteiro;

		System.out.println( inteiro + " " + resto );
	}
}

Testado e aprovado.

David,
Às vezes um teste só não é suficiente.
Tente com o número 5.97 para ver o que aparece.

foi mal pessoal,

valeu pela obs, é errando que se aprende!!! :lol:

Fiz várias experiências,compilou e funcionou

import java.text.DecimalFormat;
strictfp class MyClass { //strictfp segundo o que li evita truncamentos
public static void main (String args[]) {
DecimalFormat dezDigitos = new DecimalFormat("0.0000000000");
double d=5,890765;
int i=5;
double result=d-t;
System.out.println(dezDiditos.format(result);
}
}

Que tal:

double d = 123.4;
double intp = Math.ceil(d);
double fracp = d - intp;

Note que esse código vai manter o sinal do número, ou seja, usando d = -1.23, você obtem -.23

Nossa, é difícil mesmo convencer as pessoas a não utilizarem double para fazer essas contas, hein :frowning:

louds, testei seu código com 5.97 e também não deu muito certo. :wink:

Eh q BigDecimal eh muito lerdao!
:stuck_out_tongue:

Pessoal, muito obrigado pela ajuda!!
consegui, convertendo para string…

valeu!

Eu fiz da seguinte forma.


DecimalFormat decimalFormatter = new DecimalFormat("0.00");

String parteInteira = decimalFormatter.format(value).substring(0, decimalFormatter.format(value).indexOf(","));
String parteFracionada  = decimalFormatter.format(value).substring(decimalFormatter.format(value).toString().indexOf(","));

É isso !

Fiz um teste desse jeito e deu certo
System.out.println(“Informe o númeor”);
num = Double.parseDouble(entrada.readLine());
System.out.println("Parte inteira do Número : " + (int) (num));
System.out.println("Parte inteira do Número : " + ( num - (int)(num)));

Ah fiz de umaoutra forma que ficou melshor

  1. usei charAt() para descobrir até onde vai a parte inteira
  2. usei Substring (i. f) para atribuir o valores
    funcionou muito bem!

Devido à quantidade assombrosa de POGs que li, vou pôr aqui o método correto de achar a parte fracionária.

import java.math.BigDecimal;

class ParteFracionaria {
	public static double frac (double d) {
		if (d >= 0.0) {
			return d - Math.floor (d);
		} else {
			return d - Math.ceil (d);
		}
	}
	public static BigDecimal frac (BigDecimal bd) {
		return bd.remainder (BigDecimal.ONE);
	}
	
    public static void main (String[] args) {
	    double pi = Math.PI;
		double fracPi = frac (pi);
		double fracMinusPi = frac (-pi);
		System.out.printf ("%.14f %.14f %.14f%n", pi, fracPi, fracMinusPi);
		BigDecimal bdPi = new BigDecimal ("" + Math.PI);
		BigDecimal bdFracPi = frac (bdPi);
		BigDecimal bdFracMinusPi = frac (bdFracPi.negate());
		System.out.printf ("%.14f %.14f %.14f%n", bdPi, bdFracPi, bdFracMinusPi);
	}
}