Série da semana: Primeiros passos no Angular

Veja mais

Mascara para real com valor acima de 1000,00

17/03/2019

8

Delhpi 10 banco Fitebird 2.5
Fields numeric 15,2
Var
valor : real
Field = DisplayFormat ###,###,##0.00

Quando tiro a mascara funciona

TX53 := 1000.01;
TX54 := 1540.80;
TX55 := 1540.81;
TX56 := 7703.90;
TX57 := 7703.91;
TX58 := 30815.30;
TX59 := 30815.31;
TX60 := 50000.30;

valor:=strToFloat(DBEdit12.Text );



///////// ATE 70
IF (VALOR <= tx42) and (TX = ''A'') THEN
DBEDIT40.TEXT := ''78,31'';

IF (VALOR <= TX42) and (TX = ''B'') THEN
DBEDIT40.TEXT := ''104,35'';

IF (VALOR <= TX42) and (TX = ''C'') THEN
DBEDIT40.TEXT := ''80,71'';
//////// 70,01 ATE 154,001 ///////
IF (VALOR >= TX43) AND (VALOR <= TX44) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''89,11'';
////////154,01 A 308,30 ///////
IF (VALOR >= TX45) AND (VALOR <= TX46) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''92,79'';
////////////////308,31 A 462,30 /////////////
IF (VALOR >= TX47) AND (VALOR <= TX48) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''97,72'';
///////////////// 462,31 A 770,40 ///////
IF (VALOR >= TX49) AND (VALOR <= TX50) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''102,03'';
/////// 770,41 A 1000,00 /////
IF (VALOR >= TX51) AND (VALOR <= TX52) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''106,44'';
/////// 1000,01 A 1540,800 /////
IF (VALOR >= TX53) AND (VALOR <= TX54) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''118,74'';
/////// 1540,81 A 7.703,90 /////
IF (VALOR >= TX55) AND (VALOR <= TX56) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''126,82'';
Responder

Post mais votado

17/03/2019

Olá Nevaldo, um numero acima de 1000 que tem máscara 1.000,00 no TEdit, tem que remover os pontos (deixe a vírgula) antes de converter para float, por exemplo


var
   s: String;
  valor: real;
begin
    s:=stringReplace(dbedit.txt, '.',''); //isso apaga os pontos, na verdade, substitui o ponto por vazio e dá no mesmo.
   valor:=strToFloat(s);
end;


porém percebo que você utiliza dbEdit, então seria melhor você acessar os fields do dataset ligado a TDBEdit ou acessar o field diretamente porque aí você corta o uso da String, por exemplo:

var
    valor: double;
begin
   TX53 := 1000.01;
   TX54 := 1540.80;
   TX55 := 1540.81;
   TX56 := 7703.90;
   TX57 := 7703.91;
   TX58 := 30815.30;
   TX59 := 30815.31;
   TX60 := 50000.30;

valor:=DBEdit12.Field.asfloat; //pega o campo no formato double/real diretamente (se ele for realmente do tipo double no banco e no dataset)



///////// ATE 70
IF (VALOR <= tx42) and (TX = ''A'') THEN
DBEDIT40.field.asFloat := 78.31;   //não precisa atribuir como string; mas cuidado com o ponto ao invés de virgula e é só repetir a idéia nos próximos...

IF (VALOR <= TX42) and (TX = ''B'') THEN
DBEDIT40.field.asFloat :=104.35;

IF (VALOR <= TX42) and (TX = ''C'') THEN
DBEDIT40.field.asFloat := ''80,71'';
//////// 70,01 ATE 154,001 ///////
IF (VALOR >= TX43) AND (VALOR <= TX44) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''89,11'';
////////154,01 A 308,30 ///////
IF (VALOR >= TX45) AND (VALOR <= TX46) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''92,79'';
////////////////308,31 A 462,30 /////////////
IF (VALOR >= TX47) AND (VALOR <= TX48) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat:= ''97,72'';
///////////////// 462,31 A 770,40 ///////
IF (VALOR >= TX49) AND (VALOR <= TX50) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''102,03'';
/////// 770,41 A 1000,00 /////
IF (VALOR >= TX51) AND (VALOR <= TX52) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''106,44'';
/////// 1000,01 A 1540,800 /////
IF (VALOR >= TX53) AND (VALOR <= TX54) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''118,74'';
/////// 1540,81 A 7.703,90 /////
IF (VALOR >= TX55) AND (VALOR <= TX56) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''126,82'';



Espero ter ajudado, um forte abraço e fique com Deus.
Responder

Mais Posts

18/03/2019

Nevaldo Rebés

Olá Nevaldo, um numero acima de 1000 que tem máscara 1.000,00 no TEdit, tem que remover os pontos (deixe a vírgula) antes de converter para float, por exemplo


var
   s: String;
  valor: real;
begin
    s:=stringReplace(dbedit.txt, '.',''); //isso apaga os pontos, na verdade, substitui o ponto por vazio e dá no mesmo.
   valor:=strToFloat(s);
end;


porém percebo que você utiliza dbEdit, então seria melhor você acessar os fields do dataset ligado a TDBEdit ou acessar o field diretamente porque aí você corta o uso da String, por exemplo:

var
    valor: double;
begin
   TX53 := 1000.01;
   TX54 := 1540.80;
   TX55 := 1540.81;
   TX56 := 7703.90;
   TX57 := 7703.91;
   TX58 := 30815.30;
   TX59 := 30815.31;
   TX60 := 50000.30;

valor:=DBEdit12.Field.asfloat; //pega o campo no formato double/real diretamente (se ele for realmente do tipo double no banco e no dataset)



///////// ATE 70
IF (VALOR <= tx42) and (TX = ''A'') THEN
DBEDIT40.field.asFloat := 78.31;   //não precisa atribuir como string; mas cuidado com o ponto ao invés de virgula e é só repetir a idéia nos próximos...

IF (VALOR <= TX42) and (TX = ''B'') THEN
DBEDIT40.field.asFloat :=104.35;

IF (VALOR <= TX42) and (TX = ''C'') THEN
DBEDIT40.field.asFloat := ''80,71'';
//////// 70,01 ATE 154,001 ///////
IF (VALOR >= TX43) AND (VALOR <= TX44) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''89,11'';
////////154,01 A 308,30 ///////
IF (VALOR >= TX45) AND (VALOR <= TX46) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''92,79'';
////////////////308,31 A 462,30 /////////////
IF (VALOR >= TX47) AND (VALOR <= TX48) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat:= ''97,72'';
///////////////// 462,31 A 770,40 ///////
IF (VALOR >= TX49) AND (VALOR <= TX50) AND (TX = ''A'') THEN
DBEDIT40.TEXT := ''102,03'';
/////// 770,41 A 1000,00 /////
IF (VALOR >= TX51) AND (VALOR <= TX52) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''106,44'';
/////// 1000,01 A 1540,800 /////
IF (VALOR >= TX53) AND (VALOR <= TX54) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''118,74'';
/////// 1540,81 A 7.703,90 /////
IF (VALOR >= TX55) AND (VALOR <= TX56) AND (TX = ''A'') THEN
DBEDIT40.field.asFloat := ''126,82'';



Espero ter ajudado, um forte abraço e fique com Deus.

Cara muito obrigado, ajudou e muito valeu que Deus continue te iluminando.
Um abraço
Responder