Página 1 de 1
Como transformar um N° inteiro em decimal
Enviado: 20 Nov 2007 23:20
por Gilberto M Silva
Colegas
Estou tentando pegar um n° estraido de um string e transforma-lo em um n° decimal.
Ex:
x:=2010200000296
p:=substr(x,8,5)
o n° achado é pra ficar 000,29 ou 0,29
como faço pra que fique assim???
obg.
Enviado: 21 Nov 2007 01:35
por Maligno
A função SubStr() apenas separa uma parte da string, que continua sendo string. Como a string representa um número inteiro, você deverá convertê-lo para numérico e depois dividí-lo por um múltiplo de 10 para inserir a vírgula (ou ponto) decimal na posição desejada. No seu caso, sendo p sua sub-string "00029", a expressãoVal(p)/100 lhe dará o valor numérico desejado: 0,29.
Enviado: 21 Nov 2007 09:10
por Gilberto M Silva
Valeu :|<
Re: Como transformar um N° inteiro em decimal
Enviado: 21 Nov 2007 11:36
por Pablo César
Gilberto M Silva escreveu:pegar um n° estraido de um string e transforma-lo em um n° decimal.
Ex:
x:=2010200000296
p:=substr(x,8,5)
o n° achado é pra ficar 000,29 ou 0,29
Tem outra forma também, se seu decimal for SEMPRE com posição FIXA (é claro, impresindível) eu faria assim:
x:=2010200
000296
p:=VAL( substr(x,8,3)+"."+substr(x,11,2) )
Por quê usei o "." (ponto) e não a vírgula. Simplesmente porque o tratamento de NÚMEROS o Clipper faz ao estilo americano, onde o ponto é vírgula para nós (decimais) e onde são vírgulas para os americanos para nós são pontos (milhares). Daí pra frente você faz o que quiser com o número, que ora pode ser transformado em string novamente:
? "Valor -> "+ALLTRIM(TRANSFORM(p,"@E 999.99"))+" <-"
Enviado: 21 Nov 2007 12:43
por Grings
Como disse o Pablo, se o número de decimais for fixo, dois por exemplo:
? cNumero:='100000000'
? cNumero:= Stuff(cNumero,Len(cNumero)-1,0,'.')
Enviado: 21 Nov 2007 13:49
por Grings
Melhorando o código:
Cls
cNumero:='100000000'
? Converte(cNumero,1)
? Converte(cNumero,2)
? Converte(cNumero,3)
Static Function Converte(cNumero,nDecimal)
Return(Val(cNumero:=Stuff(cNumero,Len(cNumero)-nDecimal,0,'.')))
Enviado: 21 Nov 2007 20:10
por Gilberto M Silva
Companheiros, valeu muito as dicas, usei a do Maligno, pois resolveu, é pra tratar um código de barras de balança. O n° "2 010200 000296" sendo que: 2 010200= 2 é o dígito verificador; 010200= é o código do produto e 000296= é o preço registrado na balança, na prática não precisa usar o ultimo dígito, então cadastrei o código no sistema, quando o caixa passa o produto no leitor, o sistema checa o produto pega o preço do c.de barras com o preço do produto e calcula a quantidade e joga para o cupom fiscal, o ex: do Maligno encaixou 1ª.

)
Enviado: 21 Nov 2007 22:42
por rochinha
Amiguinho,
Qual balança voce esta usando?
É possivel voce postar o trecho de codigo em que voce le/pega esta informação para nós?
Valeu.
Enviado: 22 Nov 2007 21:03
por Gilberto M Silva
Filizola
é que cada vez que se pesa um item ela gera um código de barras diferente onde os cinco ultimos digitos é o valor da pesagem. Então eu fiz assim:
SFIR:="2010200 000519"
FIR := SUBSTR(SFIR,1,5)
SELE A (arq.onde estao os dados dos produtos"
SEEK FIR
PREUNI := 0
IF CNCLAMAT <> "001" (classe dos produtos que são pesados na balança)
SEEK SFIR
SPRECO:= PRECO
ELSE
SPRECO:= PRECO
PREUNI:= SUBSTR(SFIR,8,5)
PREUNI:= VAL(PREUNI)/100
BAIXA := PREUNI/SPRECO
ENDIF
@ 07,08 CLEAR TO 07,23
@ 07,10 SAY SFIR
@ 07,28 SAY BAIXA PICT "@R 9999.999"
@ 09,03 SAY CCNOMMAT
@ 11,11 SAY CNANTQTD PICT "@E 999,999.999"
@ 13,17 SAY DATE()
DO WHILE .T.
IF RLOCK()
@ 15,18 GET PRECO PICT "@E 999,999.99"
INKEY(1)
READ
UNLOCK
EXIT
ENDIF
ENDDO
IF PREUNI <> 0 (se preço for redigitado, calcula quantidade vendida)
BAIXA := PREUNI/PRECO
@ 07,28 SAY BAIXA PICT "@R 9999.999"
ENDIF
Essa foi a forma que achei para para funcionar sem problemas, e está funcionando blz.
Enviado: 22 Nov 2007 21:09
por Gilberto M Silva
Há, a balança não está on line com o sistema, os item pesados são pre cadastrados no sistema, por isso fiz assim.
Enviado: 25 Nov 2007 10:06
por Eolo
Eu estou montando um sistema que usa balanças TOLEDO e ECFs Bematech térmicas, e tem um pepino: Arredondamento (balança) versus Truncamento (ECF) de valores (na Bematech matricial não há problema).
Exemplo: código 1663. Banana Caturra KG, R$0,89 por Kg (informações previamente carregadas na balança e no PDV).
Coloquei 696 gramas na balança e ela fez o seguinte:
. calculou 0,696g x R$0,89 = R$0,61944
. arredondou o resultado para R$0,62.
. imprimiu a etiqueta com código 1663, valor R$0,62.
. (código de barras: 2 016630 00062 2)
No PDV, como o código de barras da etiqueta só traz o código de produto e o valor final, é feito o seguinte para poder completar as informações do cupom fiscal:
. procura o código 1663 na sua lista de produtos;
. obtém o preço por Kg (R$0,89) e o nome do produto.
. para obter o peso, faz a conta inversa:
R$0,62 / R$0,89 = 0,69662921..
. como não aceita arredondamento, trunca este valor para 0,696.
. em seguida, faz 0,696 x R$0,89 = 0,61944 e trunca para R$0,61.
. imprime 0,696g x R$,89 = R$0,61 no cupom fiscal...
Tá feita a encrenca: R$0,62 na etiqueta contra R$0,61 no cupom.
Outro problema é o peso para baixa de estoque: neste exemplo, o peso foi o mesmo nas duas pontas - 696 gramas, mas foi coincidência. Certo que eventuais diferenças seriam pequenas, mas acho que deveria haver algum tratamento...
Mais um: cargas passadas às balanças e aos PDVs DURANTE o expediente. Exemplo: o cliente passa na balança às 10:00hs. e pega a etiqueta conforme citado acima. Às 10:05hs., é atualizada a tabela de preços (a banana passa a R$1,50/kg). Às 10:10hs., o cliente passa a etiqueta (original) no caixa e o PDV faz o cálculo com o novo preço:
. R$0,62 / R$1,50 (novo preço) = 0,4133333... (NOVO PESO!)
. valor truncado para 0,413g
. 0,413g x R$1,50 = R$0,6195
. valor truncado para R$0,61
O cliente vai pagar o mesmo valor, mas o estoque vai ser baixado em 413 e não em 696 gramas...
Bem, uma saída talvez seja fazer a balança imprimir o código de barras com o PESO ao invés do PREÇO. Mas pode fazer isso, dar ao cliente uma etiqueta sem preço?
Enviado: 25 Nov 2007 17:38
por Gilberto M Silva
O cliente vai pagar o mesmo valor, mas o estoque vai ser baixado em 413 e não em 696 gramas...
Bem, uma saída talvez seja fazer a balança imprimir o código de barras com o PESO ao invés do PREÇO. Mas pode fazer isso, dar ao cliente uma etiqueta sem preço?
Mestre Eolo, Não pode sair a etiqueta sem preço e sem peso, aqui no mercadinho não tem problema quanto ao estoque, pois eles trabalham com quebra de estoque para produtos açougue e horti-fruti, eles tem um percentual pra + ou pra - se extrapolar o limite eles sabem por isso não tem problema agora quanto a diferença de peso no PDV, pois a balança trabalha com uma pesagem de cinco em cinco gramas e o PC calcula de uma em uma. se existe uma forma de conciliar balança PDV não sei, aqui a etiqueta sai o código e os ultimos 5 digitos é o preço.