Come eseguire la divisione in Go


89

Sto cercando di eseguire una semplice divisione in Go.

fmt.Println(3/10)

Questo stampa 0 invece di 0,3. Questo è un po 'strano. Qualcuno potrebbe per favore condividere qual è la ragione dietro questo? voglio eseguire diverse operazioni aritmetiche in Go.

Grazie

Risposte:


93

L'espressione 3 / 10è un'espressione costante non tipizzata. La specifica dice questo sulle espressioni costanti

se gli operandi di un'operazione binaria sono diversi tipi di costanti non tipizzate, l'operazione e, per le operazioni non booleane, il risultato usano il tipo che appare più avanti in questo elenco: intero, runa, virgola mobile, complesso.

Poiché 3e 10sono costanti intere non tipizzate, il valore dell'espressione è un numero intero non tipizzato (0 in questo caso).

Uno degli operandi deve essere una costante a virgola mobile affinché il risultato diventi una costante a virgola mobile. Le seguenti espressioni valutano la costante a virgola mobile non tipizzata 0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0

È anche possibile utilizzare costanti digitate. Le seguenti espressioni valutano la float64costante 0.3:

float64(3) / float64(10)
float64(3) / 10
3 / float64(10)

La stampa di una qualsiasi delle espressioni precedenti verrà stampata 0.3. Ad esempio, fmt.Println(3.0 / 10)stampe 0.3.


Prendo input supponendo che sia percentuale. Ad esempio, se l'utente fornisce 30, devo eseguire un numero pari a 30/100 *. L'input sarà sempre un numero intero. Come eseguire la divisione in questo scenario?
Vrushank Doshi

Converti gli interi in numeri in virgola mobile.
Cerise Limón

ho provato fmt.Println (float64 (3/10)) ma mi dà 0
Vrushank Doshi

8
@VrushankDoshi: fmt.Println(float64(3) / float64(10))0.3.
peterSO

22

Come menzionato da @Cerise e secondo le specifiche

Gli operatori aritmetici si applicano ai valori numerici e producono un risultato dello stesso tipo del primo operando.

In questo caso solo il primo operando deve essere in virgola mobile.

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3

Esempio


Sì! solo il primo operando
SMMousavi

Non sempre riesce, nel caso in cui "10" venga rilevato come int, verrà generato il seguente errore: operazione non valida: (tipi non corrispondenti float64 e int)
Feras
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.