Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Você realmente gosta da complicação . Se o objetivo é apenas processar números reais, use StringToDouble() e um processamento de caso especial 0.
Essa foi a solução inicial:
Se você não espera que o valor seja sempre 0, digite o dobro e teste que não é igual a 0.
Entretanto, o OP queria ser capaz de lidar com a distinção se 0 era o valor inserido, ou se 0 era o resultado de a string ser um número inválido. Tanto "0" como "sfdlgkjsflkjdsklfsd" vão resultar em 0 com StringToDouble() ou (duplo).
Isto foi inaceitável para a OP que então gerou esta discussão subseqüente.
Essa foi a solução inicial:
Entretanto, a OP queria ser capaz de lidar com a distinção se 0 era o valor inserido, ou se 0 era o resultado de a cadeia ser um número inválido. Tanto "0" como "sfdlgkjsflkjdsklfsd" vão resultar em 0 com StringToDouble() ou (duplo).
Isto foi inaceitável para a OP que então gerou esta discussão subseqüente.
Exemplo simplificado :
if(value==0)
{
if(inputs=="0" || inputs=="0.0")
{
//--- all is ok
}
else
{
//--- wrong inputs
}
}
É por isso que eu disse "e um processamento de caso especial 0".
Exemplo simplificado :
if(value==0)
{
if(inputs=="0" || inputs=="0.0")
{
//--- all is ok
}
else
{
//--- wrong inputs
}
}
E quanto às 0,00?
Ou +0,00?
Ou 0,0?
Sim, isso é um problema.
Você poderia fazer uma comparação de cordas se o valor de elenco = 0
i.e. if(cast_value == 0 && str_value == "0")
Mas você teria que pensar em 0,0 ou 0,00 sendo inseridos.
Você poderia estourar a corda em uma matriz de caracteres e testar cada caractere.
Depende de quão importante isto é.
E quanto às 0,00?
Ou +0,00?
Ou 0,0?
É por isso que eu disse "Exemplo simplificado". Eu não farei o trabalho para a OP.
É um exercício interessante, mas será melhor ter uma lista de possíveis variações de "0", ou apenas testar tudo?
O primeiro é indiscutivelmente mais rápido, mas com o risco de faltar uma variação legítima.
Entretanto, quão importante é a velocidade quando ela só deve ser testada em umCHARTEVENT_OBJECT_ENDEDIT?
Independentemente disso, tenho certeza de que a OP agora tem muito que continuar!
É um exercício interessante, mas será melhor ter uma lista de possíveis variações de "0", ou apenas testar tudo?
O primeiro é indiscutivelmente mais rápido, mas com o risco de faltar uma variação legítima.
Entretanto, quão importante é a velocidade quando ela só deve ser testada em umCHARTEVENT_OBJECT_ENDEDIT?
Independentemente disso, tenho certeza de que a OP agora tem muito que continuar!
Ou usando a expressão regular:-D
Você também pode pedir para inserir zero como "0" e rejeitar todos os outros casos.
Ou usando a expressão regular :-D
Pessoalmente, eu estaria adotando uma abordagem como esta:
Uma vez que o ENDEDIT aconteça, lance o OBJ_TEXT em um duplo e depois empurre-o de volta para a caixa de edição como uma string (usando StringFormat() se eu quisesse controlar o formato). O usuário verá imediatamente o resultado de suas ações e poderá alterá-lo se não se adequar às suas necessidades, ou deixá-lo.
Por exemplo
#define EDIT_BOX "EditBox"
int OnInit()
{
ObjectCreate (0, EDIT_BOX, OBJ_EDIT, 0, 0, 0);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_XDISTANCE, 200);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_YDISTANCE, 200);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_XSIZE, 100);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_YSIZE, 20);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_ALIGN, ALIGN_CENTER);
ObjectSetString (0, EDIT_BOX, OBJPROP_TEXT, "Enter Value");
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
ObjectDelete(0, EDIT_BOX);
}
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
if(id==CHARTEVENT_OBJECT_ENDEDIT && sparam==EDIT_BOX)
{
double value = (double) ObjectGetString(0, EDIT_BOX, OBJPROP_TEXT);
ObjectSetString(0, EDIT_BOX, OBJPROP_TEXT, (string)value);
}
}
Pessoalmente, eu estaria adotando uma abordagem como esta:
Uma vez que o ENDEDIT aconteça, lance o OBJ_TEXT em um duplo e depois empurre-o de volta para a caixa de edição como uma string (usando StringFormat() se eu quisesse controlar o formato). O usuário verá imediatamente o resultado de suas ações e poderá alterá-lo se não se adequar às suas necessidades, ou deixá-lo.
Por exemplo
#define EDIT_BOX "EditBox"
int OnInit()
{
ObjectCreate (0, EDIT_BOX, OBJ_EDIT, 0, 0, 0);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_XDISTANCE, 200);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_YDISTANCE, 200);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_XSIZE, 100);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_YSIZE, 20);
ObjectSetInteger(0, EDIT_BOX, OBJPROP_ALIGN, ALIGN_CENTER);
ObjectSetString (0, EDIT_BOX, OBJPROP_TEXT, "Enter Value");
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
ObjectDelete(0, EDIT_BOX);
}
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
if(id==CHARTEVENT_OBJECT_ENDEDIT && sparam==EDIT_BOX)
{
double value = (double) ObjectGetString(0, EDIT_BOX, OBJPROP_TEXT);
ObjectSetString(0, EDIT_BOX, OBJPROP_TEXT, (string)value);
}
}
Você precisará de uma maneira de validar sua entrada. (um botão adicional ?)
Mantenha-o simples. De qualquer forma, como você desejar :p
Você precisará de uma maneira de validar sua contribuição. (um botão adicional ?)
Não tenho certeza se estou seguindo...?
Posso ter entendido mal a intenção do OP, mas acredito que a interface será dinâmica, ou seja, uma mudança nesta caixa de edição resultará em uma atualização de outra caixa de acordo.
Você poderia ter um botão de validação, mas se o resultado for simplesmente exibido (em vez de acionado), pode ser uma adição desnecessária. Mas não tenho certeza - a OP precisaria esclarecer.
Mantenha-o simples. De qualquer forma, como você desejar :p
Eu concordo muito em manter as coisas simples. Será que fica mais simples do que isto?
ObjectSetString(0, EDIT_BOX, OBJPROP_TEXT, (string)value);
PS Não tenho certeza se é como eu desejo, é apenas uma discussão acadêmica para mim - não tenho necessidade disso!
Não tenho certeza se estou seguindo...?
.... Se tomarmos como um pedido geral: "Como verificar se o conteúdo de uma variável é numérico?", a solução mais elegante é usar a expressão regular.