Pessoal,
Essa semana passei por uma situação, que dei uma pesquisada rápida mas não achei uma solução, pelo menos decente. Eu precisava fazer o incremento de um valor, que tinha 9 casas decimais depois da virgula, ou seja, imagina que fosse 2,123456789, eu precisava incrementar a casa decimal "9", mas queria deixar o script dinâmico, a ponto de, se tiver 9 casas decimais, ele incremente a nona casa decimal. Se a variável tiver 5 casas decimais, ex.: 1,23456, ele incremente a casa decimal "6", ou seja, sempre a última.
Como vocês fariam isso dinamicamente ?
[ ]s
Incrementar última casa decimal
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 210
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
- dr_gori
- Moderador
- Mensagens: 5013
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você quer arredondar a última casa decimal ? Ou quer SEMPRE incrementar? (não importando o valor).
Exemplo: Digamos que você tem 10,1234321
Você quer que o resultado seja 10,1234322 ?
Exemplo: Digamos que você tem 10,1234321
Você quer que o resultado seja 10,1234322 ?
- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 210
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
Incrementar dr_gori, igual o exemplo que você deu, mas com um porém, pode ser que depois da virgula tenha 5 casas ou 9 casas !!!
- dr_gori
- Moderador
- Mensagens: 5013
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Eu fiz assim:
Você pode colocar qualquer número ali onde está o 10.1234567.
Inclusive funciona pra números negativos.

with n as (select 10.1234567 numero from dual)
select
numero
, numero + 1/power(10, length(numero-trunc(numero))-1 ) incrementado
from n;
Você pode colocar qualquer número ali onde está o 10.1234567.
Inclusive funciona pra números negativos.
SQL> with n as (select 10.1234567 numero from dual)
2 select
3 numero
4 , numero + 1/power(10, length(numero-trunc(numero))-1 ) incrementado
5 from n;
NUMERO INCREMENTADO
---------- ------------
10.1234567 10.1234568
SQL>
SQL>
SQL> with n as (select 3.6543 numero from dual)
2 select
3 numero
4 , numero + 1/power(10, length(numero-trunc(numero))-1 ) incrementado
5 from n;
NUMERO INCREMENTADO
---------- ------------
3.6543 3.6544
SQL>

- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 210
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
Show dr_gori,
Vou dar uma estudada no seu script, para entender a lógica
Muito obrigado.
Vou dar uma estudada no seu script, para entender a lógica

Muito obrigado.
- dr_gori
- Moderador
- Mensagens: 5013
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Eu usei a seguinte lógica:
Digamos que o número é 12.3456.
Primeiro, eu descubro quantos dígitos tem depois da vírugla.
No caso:
Ou seja, TRUNC ( 12.3456 ) é igual a 12.
Portanto, 12.3456 - 12 = .3456
Daí eu faço o LENGTH pra saber quantos dígitos:
LENGTH ( .3456 ) - 1 = 4 (ou seja, 4 digitos. O -1 é pra tirar fora o ponto).
Agora que eu sei que tem 4 dígitos, eu faço:
1 / (10 elevado ao número de dígitos). Este é o valor que eu vou somar.
Veja:
1 / (10 ^ 4 ) =
1 / ( 10000 ) = 0.0001
Daí basta somar esse número ao valor inicial.
12.3456 + 0.0001 = 12.3457
Se o número original tivesse 2 casas decimais, ele ia somar 0.01.
Se tivesse 6 casas decimais, somaria 0.000001

Digamos que o número é 12.3456.
Primeiro, eu descubro quantos dígitos tem depois da vírugla.
No caso:
length(numero-trunc(numero))-1
Portanto, 12.3456 - 12 = .3456
Daí eu faço o LENGTH pra saber quantos dígitos:
LENGTH ( .3456 ) - 1 = 4 (ou seja, 4 digitos. O -1 é pra tirar fora o ponto).
Agora que eu sei que tem 4 dígitos, eu faço:
1 / (10 elevado ao número de dígitos). Este é o valor que eu vou somar.
Veja:
1 / (10 ^ 4 ) =
1 / ( 10000 ) = 0.0001
Daí basta somar esse número ao valor inicial.
12.3456 + 0.0001 = 12.3457
Se o número original tivesse 2 casas decimais, ele ia somar 0.01.
Se tivesse 6 casas decimais, somaria 0.000001

- tiago_pimenta
- Rank: DBA Júnior
- Mensagens: 210
- Registrado em: Qua, 29 Jun 2011 9:49 am
- Localização: Barretos / SP
Show... Não tinha entendido realmente o power (Potência).
Perfeito... Valeu man
Perfeito... Valeu man

-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes