PORCENTAGEM

COQUITO 22/04/2022 10:55:40
#499671
ola pessoal
preciso tirar uma duvida
estou tentando fazer um calculo de lucro, só que o calculo esta me retornando errado
já tentei alterar o tipo de variavel mais não tenho sucesso.
o que preciso que seja calculado o valor da compra x a porcentagem
que o retorno da venda

  
double SlgPorcento = Convert.ToDouble(txtValorMarkup.Text.Replace("%", ""));
double DblValMargem = Convert.ToDouble(txtPrecoCompra.Text) * (SlgPorcento) / 100;
double DblValTotal = Convert.ToDouble(DblValMargem) + Convert.ToDouble(txtPrecoCompra.Text);
txtPrecoVenda.Text = DblValTotal.ToString();
DblValTotal = 0;




alguma ideia que possa ajudar?
JABA 22/04/2022 14:42:23
#499676
Resposta escolhida
double SlgPorcento = Convert.ToDouble(txtValorMarkup.Text.Replace("%", "")) / 100;
double preco_compra = Convert.ToDouble(txtPrecoCompra.Text);
double preco_venda = preco_compra * (1 + SlgPorcento);
double lucro = preco_venda - preco_compra;

COQUITO 22/04/2022 15:06:21
#499677
Citação:

:

double SlgPorcento = Convert.ToDouble(txtValorMarkup.Text.Replace("%", "")) / 100;
double preco_compra = Convert.ToDouble(txtPrecoCompra.Text);
double preco_venda = preco_compra * (1 + SlgPorcento);
double lucro = preco_venda - preco_compra;



ele disparou pirou rsrsrs.

anteriormente estava dando o problema na mascara da moeda, parece que a mascara não está diferenciando o valor depois do ponto. porque quando faço em modo manual ele calcula perfeitamente.

  
public static void Moeda( TextBox txt)
{
string n = string.Empty;
double v = 0;
try
{
n = txt.Text.Replace(",", "").Replace(",", "").Replace("%","");
if (n.Equals(""))
n = "";
n = n.PadLeft(3, "0");
if (n.Length > 3 & n.Substring(0, 1) == "0")
n = n.Substring(1, n.Length - 1);
v = Convert.ToDouble(n) / 100;
txt.Text = string.Format("{0:N}", v);
txt.SelectionStart = txt.Text.Length;
}
catch (Exception erro)
{
MessageBox.Show(erro.Message);
}
}
JABA 22/04/2022 17:15:14
#499679
Me de exemplos com números do que voce precisa que mais tarde posto a solução aqui.
COQUITO 22/04/2022 23:32:53
#499681
veja
que acontece é que se eu compro uma bala por 0,10 a unidade preciso aplicar a porcentagem para ter o valor de venda
neste caso seria assim
compra 0.10
markup 56,55%
o retorno para venda = 0,156
como te comentei, existe a formatação da moeda quando o valor passa pela formatação ai arredonda.
JABA 23/04/2022 00:09:22
#499682
Eu havia considerado o valor de porcentagem como sendo inteiro, daí tinha dividido por 100 para transformá-lo em decimal. Se a porcentagem já está em decimal, como o 0,01 no campo markup, então não é necessário dividi-lo por 100 como eu fiz. Lembre-se que 0,01 corresponde a 1% e que 0,1 correspondem a 10%. Daí ficaria assim:

double SlgPorcento = Convert.ToDouble(txtValorMarkup.Text.Replace("%", ""));
double preco_compra = Convert.ToDouble(txtPrecoCompra.Text);
double preco_venda = preco_compra * (1 + SlgPorcento);


A formatação vai arredondar porque a quantidade de casas para cobrir os decimais está menor do que as do valor original. Nesse teu exemplo o valor de saída é 0,15655, e, se a formatação for com apenas 3 casas decimais, ele pode virar 0,156 ou 0,157; sendo um problema nas duas formas.
COQUITO 23/04/2022 08:54:46
#499684
Citação:

:
Eu havia considerado o valor de porcentagem como sendo inteiro, daí tinha dividido por 100 para transformá-lo em decimal. Se a porcentagem já está em decimal, como o 0,01 no campo markup, então não é necessário dividi-lo por 100 como eu fiz. Lembre-se que 0,01 corresponde a 1% e que 0,1 correspondem a 10%. Daí ficaria assim:

double SlgPorcento = Convert.ToDouble(txtValorMarkup.Text.Replace("%", ""));
double preco_compra = Convert.ToDouble(txtPrecoCompra.Text);
double preco_venda = preco_compra * (1 + SlgPorcento);


A formatação vai arredondar porque a quantidade de casas para cobrir os decimais está menor do que as do valor original. Nesse teu exemplo o valor de saída é 0,15655, e, se a formatação for com apenas 3 casas decimais, ele pode virar 0,156 ou 0,157; sendo um problema nas duas formas.



percebi agora, obrigado.
Tópico encerrado , respostas não são mais permitidas