Pregunta

Cómo obtener la longitud fracción? Si es posible, sin necesidad de utilizar operación de cadena o el lazo

should all return length of 3:
5.234
5.23400
5.234000

Se acepta cualquier lenguaje de programación

[EDIT]

No es una tarea, Quiero mostrar fracciones en su mínimo. Ejemplo, I define numérico (18,8) en la base de datos. Si el usuario ha introducido solamente 5.234, los datos guardados en la base de datos es 5,23400000. Sólo quiero mostrar de nuevo como única 5.234

¿Fue útil?

Solución

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")

No hay operaciones de cadena, no hay bucles.

EDIT:

BTW, para hacer esto con un bucle:

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

Un poco más elegante

Otros consejos

Dado que usted está preocupado acerca de exhibición o representación interna no, ¿por qué no despojar a los 0s se arrastran?

#!/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";

Puede optimizar tanto, probablemente en una sola expresión regular.

En la parte no fracción, la longitud es:

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

siempre que v> 1 donde ln () es el logaritmo natural y int () siempre redondea hacia abajo. Para v == 1, ln (v) devuelve 0, por lo que debe manejar esto en un caso especial.

Debería ser posible lograr lo mismo para la parte fraccionaria (v - int(v)) pero mi matemáticas me falla.

Sólo implementar el algoritmo de la división. Y se detiene cuando el recuento de número> 7 u 8 dígitos (por float32)

Cuando se utiliza Java y JDBC, obtener el valor medio de ResultSet.getBigDecimal () . Para obtener la escala correcta, utilice el código (Java 5 y hasta; hay un error en Java 1.4 que lo hace fallar por "0.0"):

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

En Java 1.4, consulte esta página .

En Java:

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

Asumo, es posible que desee convertir la cadena en el doble de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top