Formato
Amigos,
Como faço para trabalhar com formato de números no VB.net
Tenho uma aplicação que realiza uma conta com numeros decimais,
por exemplo: 50000 * 1.5 = 750
quero que na TEXTBOX que recebe este valor apareça "750,00"
Quais os parametros? em pesquisa cheguei a opção de string.Format, mas não estou obtendo sucesso,
Gostaria de saber como posso utilizar este também com uma MASKEDIT com este formato Decimal,
Poderaim me dizer alguns exemplos?
Agradeço
Fernando Reis
Curtidas 0
Respostas
Fabio Mans
17/02/2009
Olá segue alguns exemplos.string a = String.Format("{0:c}", SUA VARIAVEL DE VALOR);
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"Para o MaskEdit você pode utilizar o Ajax.
http://www.asp.net/ajax/ajaxcontroltoolkit/samples/maskededit/maskededit.aspxOu uma máscara decimal, segue um exemplo, é o que mais utilizo.Campo decimal
<asp:textbox
onkeypress="return(currencyFormat(this,'',',',event));"
id="Doc_Entrada_Vlr_Tot_IPI"
onkeydown="teclaEnter(event)"
onblur="return SaiCampo(this);"
onfocus="return EntraCampo(this);" runat="server" CssClass="textbox">0,00</asp:textbox>
function currencyFormat(fld, milSep, decSep, e) {
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13) return true; // Enter
if (whichCode == 8) return true; // Delete
key = String.fromCharCode(whichCode); // Get key value from key code
if (strCheck.indexOf(key) == -1) return false; // Not a valid key
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0'+ decSep + '0' + aux;
if (len == 2) fld.value = '0'+ decSep + aux;
if (len > 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}
function teclaEnter(event)
{
var tecla = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if(tecla==13){
event.keyCode=9;
event.which=9;
event.charCode=9;
}
}
function EntraCampo(valor){
var Vvalor = valor.value;
if(Vvalor != '0,0'){
valor.value = Vvalor;
}else{
valor.value = '';
}
return valor;
}
function SaiCampo(valor){
var Vvalor = valor.value;
if(Vvalor == '' || Vvalor == '0,0'){
valor.value = '0,0';
}else{
valor.value = Vvalor;
}
return valor;
}Espero ter ajudado.
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"Para o MaskEdit você pode utilizar o Ajax.
http://www.asp.net/ajax/ajaxcontroltoolkit/samples/maskededit/maskededit.aspxOu uma máscara decimal, segue um exemplo, é o que mais utilizo.Campo decimal
<asp:textbox
onkeypress="return(currencyFormat(this,'',',',event));"
id="Doc_Entrada_Vlr_Tot_IPI"
onkeydown="teclaEnter(event)"
onblur="return SaiCampo(this);"
onfocus="return EntraCampo(this);" runat="server" CssClass="textbox">0,00</asp:textbox>
function currencyFormat(fld, milSep, decSep, e) {
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13) return true; // Enter
if (whichCode == 8) return true; // Delete
key = String.fromCharCode(whichCode); // Get key value from key code
if (strCheck.indexOf(key) == -1) return false; // Not a valid key
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0'+ decSep + '0' + aux;
if (len == 2) fld.value = '0'+ decSep + aux;
if (len > 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}
function teclaEnter(event)
{
var tecla = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if(tecla==13){
event.keyCode=9;
event.which=9;
event.charCode=9;
}
}
function EntraCampo(valor){
var Vvalor = valor.value;
if(Vvalor != '0,0'){
valor.value = Vvalor;
}else{
valor.value = '';
}
return valor;
}
function SaiCampo(valor){
var Vvalor = valor.value;
if(Vvalor == '' || Vvalor == '0,0'){
valor.value = '0,0';
}else{
valor.value = Vvalor;
}
return valor;
}Espero ter ajudado.
GOSTEI 0
Fernando Reis
17/02/2009
Fabio,
desculpe,
esta duvida esta voltada para desenvolvimento DESKTOP e não WEB,
Desculpe , erro meu,
bom, aproveitado tentei usar alguns exemplos que passou mas não consegui por exemplo o
String.Format("{0:0.00}", 123.4); ele ainda retorna um valor sem os dois dígitos decimais,
posso modificar o Chamado para desenvolvimento.net ou pode me ajudar por aqui mesmo??
veja meu código:
Private Sub btnCriar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCriar.Click
'Cria o DataTable com o atributo de nome
Dim dt As New Data.DataTable("tabelaCusto")
Dim dr As DataRow
'Instancia as variaveis de Impostos
Dim sngVendaBruta As Single = CSng(txtValor.Text)
Dim sngIR As Single = 1.5
Dim sngIRRF As Single = 4.8
Dim sngCSocial As Single = 2.88
Dim sngISS As Single = 5
Dim sngPISCOFINS As Single = 3.65
Dim sngTotalImposto As Single = sngIR + sngIRRF + sngCSocial + sngISS + sngPISCOFINS
Dim sngVendaLiquida As Single = sngVendaBruta - (sngVendaBruta * (sngTotalImposto / 100))
'Cria as DataColumns
Dim dcTitulo As New DataColumn
Dim dcDescricao As New DataColumn
Dim dcPorcentagem As New DataColumn
Dim dcValor As New DataColumn
'Atribui as propriedades de cada DataColumn
With dcTitulo
.DataType = System.Type.GetType("System.String")
.ColumnName = "Tipo"
.ReadOnly = True
.Unique = False
End With
With dcDescricao
.DataType = System.Type.GetType("System.String")
.ColumnName = "Descricao"
.ReadOnly = True
.Unique = True
.Caption = "Descri‡Æo"
End With
With dcPorcentagem
.DataType = System.Type.GetType("System.Single")
.ColumnName = "Porcentagem"
.ReadOnly = True
.Unique = False
.Caption = "Porcentagem(%)"
End With
With dcValor
.DataType = System.Type.GetType("System.Single")
.ColumnName = "Valor"
.ReadOnly = False
.Unique = False
End With
'Coluna com identifica‡Æo prim ria - NECESSµRIO
Dim PrimaryKeyColumns(0) As DataColumn
'Primeira Coluna ‚ PriamryKey
PrimaryKeyColumns(0) = dt.Columns("dcDescricao")
'DataTable recebe a PRIMARYKEY
dt.PrimaryKey = PrimaryKeyColumns
'Acrescenta as colunas no Datatable
dt.Columns.Add(dcTitulo)
dt.Columns.Add(dcDescricao)
dt.Columns.Add(dcPorcentagem)
dt.Columns.Add(dcValor)
'Acrescenta as linhas de Impostos
dr = dt.NewRow()
dr("tipo") = "Impostos"
dt.Rows.Add(dr)
'Inclui os Impostos
'IR
dr = dt.NewRow()
dr("descricao") = "IR"
dr("porcentagem") = sngIR
#######################################################################
dr("valor") = String.Format("{0:0.00}", (sngVendaBruta * (sngIR / 100)))
'é aqui que ele ainda me retorna um valor sem formato
#######################################################################
dt.Rows.Add(dr)
GOSTEI 0
Fabio Mans
17/02/2009
Tentadr("valor") = String.Format("{0:c}", (sngVendaBruta * (sngIR / 100)))
GOSTEI 0
Fernando Reis
17/02/2009
Grato, Resolvido
GOSTEI 0