[JAVA] Confrontare parti decimali di due numeri double

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
daniele87
Prode Principiante
Messaggi: 146
Iscrizione: lunedì 12 ottobre 2009, 22:42

[JAVA] Confrontare parti decimali di due numeri double

Messaggio da daniele87 »

Esiste un modo per confrontare, in maniera precisa, le parti decimali di due numeri double?
Tnx
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1627
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [JAVA] Confrontare parti decimali di due numeri double

Messaggio da nuzzopippo »

Domanda un po' vaga ... cosa servirebbe di preciso?

Giusto per esempio, volendo confrontate le parti decimali di due long [edit : intendevo double :shy: ] secondo i criteri "maggiore, minore o uguale" sarebbe sufficiente sottrarre la parte intera e comparare, la butto li

Codice: Seleziona tutto

public class Test {
	public static void main(String[] args) {
		try {
			double x = Double.parseDouble(args[0]);
			double y = Double.parseDouble(args[1]);
			double a = x - Math.floor(x);
			double b = y - Math.floor(y);
			if (a > b) {
				System.out.println("a maggiore di b");
			} else if(a < b) {
				System.out.println("a minore di b");
			} else {
			   System.out.println("a uguale b");
			}
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}
Diverso è il discorso quando si vogliano confrontare i singoli caratteri costituenti le parti decimali di due numeri, in tal caso si dovrebbero convertire i singoli numeri in stringhe, suddividere le stringhe nella parte intera e decimale, p.e. usando split() con il punto come elemento separatore e quindi operare.

Al di sopra di tutto aleggia la circostanza che la rappresentazione numerica informatica non è assolutissimamente precisa.
{edit] giusto a riprova dell'imprecisione, inserendo l'istruzione

Codice: Seleziona tutto

System.out.println("Valori : x = " + x + ", y = " + y + ", a = " + a + ", b = " + b);
dopo la definizione delle variabili si otterrebbe, per i valori 3.234 e 1.233 il seguente output

Codice: Seleziona tutto

 java Test 3.234 1.233
Valori : x = 3.234, y = 1.233, a = 0.23399999999999999, b = 0.2330000000000001
a maggiore di b
Ultima modifica di nuzzopippo il martedì 7 luglio 2015, 12:56, modificato 2 volte in totale.
Fatti non foste a viver come bruti ...
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: [JAVA] Confrontare parti decimali di due numeri double

Messaggio da SuperStep »

quello che devi fare per estrapolare la parte decimale senza trasformarlo in stringa se hai due numeri, ti basta sottrarre il numero arrotondato (per i numeri negativi devi aggiungere +1)

Codice: Seleziona tutto

intero_numero_1 = floor(numero_1);
decimale_numero_1 = numero_1 - intero_numero_1;

intero_numero_2 = floor(numero_2);
decimale_numero_2 = numero_2 - intero_numero_2
adesso specifica cosa intendi per confrontare, in ogni caso le due parti sono decimale_numero_1, decimale_numero_2
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
daniele87
Prode Principiante
Messaggi: 146
Iscrizione: lunedì 12 ottobre 2009, 22:42

Re: [JAVA] Confrontare parti decimali di due numeri double

Messaggio da daniele87 »

Scusate l'enorme ritardo e grazie per le risposte.
La mia domanda era riferita al fatto che devo memorizzare parte intera e decimale di un numero double in due vettori differenti.
Stavo provando anche ad utilizzare le stringhe, col seguente codice:

Codice: Seleziona tutto

/* voglio ottenere solo la parte decimale */
double v = 23.689;
String num = String.valueOf(v);
String[] num2 = num.split(".");
System.out.println(num2.length); // stampa 0
long l = Long.parseLong(num2[1]);
Ma non capisco come mai il metodo split non divide in 2 la stringa quando incontra il separatore ".".
Dove sbaglio?
Grazie
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [JAVA] Confrontare parti decimali di due numeri double

Messaggio da crap0101 »

split() splitta utilizzando le espressioni regolari, se vuoi matchare il carattere `.` devi usare l'escape.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
daniele87
Prode Principiante
Messaggi: 146
Iscrizione: lunedì 12 ottobre 2009, 22:42

Re: [JAVA] Confrontare parti decimali di due numeri double

Messaggio da daniele87 »

Grazie
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti