Domanda

Come ottenere la lunghezza frazione? Se possibile, senza l'utilizzo di funzionamento stringa o ad anello

should all return length of 3:
5.234
5.23400
5.234000

Ogni linguaggio di programmazione è accettato

[EDIT]

Non è un lavoro, voglio visualizzare frazioni al suo minimo. Esempio, ho definito numerico (18,8) nel database. Se l'utente ha immesso solo 5.234, i dati salvati nel database è 5,23,4 milioni. Voglio solo visualizzare indietro come 5.234 solo

È stato utile?

Soluzione

If Int(num) = num Then Return 0
num *= 10
If Int(num) = num Then Return 1
num *= 10
If Int(num) = num Then Return 2
num *= 10
If Int(num) = num Then Return 3
num *= 10
If Int(num) = num Then Return 4
num *= 10
If Int(num) = num Then Return 5
num *= 10
If Int(num) = num Then Return 6
num *= 10
If Int(num) = num Then Return 7
num *= 10
If Int(num) = num Then Return 8
Throw New Exception("Number exceeds expected precision")

Non ci sono operazioni sulle stringhe, nessun cicli.

EDIT:

A proposito, a che fare questo con un ciclo:

result = 0
Do While (Int(num) !> num) 
    num *= 10
    result += 1
Loop
Return result

Un po 'più elegante

Altri suggerimenti

Dato che siete preoccupati per la visualizzazione e la rappresentazione non interna, perché non basta a nudo gli 0 trascinamento?

#!/use/bin/perl

my @nums = ( '5.234', '5.23400', '5.234000' );
$_ =~ s/0+$// for @nums;  # remove trailing 0s
$_ =~ s/\.$// for @nums;  # remove trailing .

print "@nums\n";

Probabilmente si può ottimizzare sia in un unico regex.

Per la parte non-frazione, la lunghezza è:

int((ln(v)/ln(10))+.999)

finché v> 1 dove ln () è il logaritmo naturale e int () arrotonda sempre giù. Per v == 1, ln (v) restituisce 0, quindi è necessario gestire questo in un caso particolare.

Dovrebbe essere possibile ottenere la stessa cosa per la parte frazionaria (v - int(v)), ma la mia matematica mi riesce.

Basta implementare l'algoritmo di divisione. E ci si ferma quando il conteggio numero> 7 o 8 cifre (per float32)

Quando si utilizza Java e JDBC, ottenere il valore tramite ResultSet.getBigDecimal () . Per ottenere la scala corretta, utilizzare questo codice (Java 5 e fino, c'è un bug in Java 1.4 che lo rende fallire per "0,0"):

int precision = v.stripTrailingZeros().scale();

Per Java 1.4, vedi questa pagina .

In Java:

Double.valueOf("5.34000").toString();

presumo, si può decidere di convertire la stringa di raddoppiare in ogni caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top