¿Cómo podría convertir datos de cadena a larga en C #?
Tengo datos
String strValue[i] ="1100.25";
ahora lo quiero en
long l1;
¿Cómo podría convertir datos de cadena a larga en C #?
Tengo datos
String strValue[i] ="1100.25";
ahora lo quiero en
long l1;
Respuestas:
Esta respuesta ya no funciona y no puedo encontrar nada mejor que las otras respuestas (ver más abajo) que se enumeran aquí. Revíselos y vote por ellos.
Convert.ToInt64("1100.25")
Firma del método de MSDN:
public static long ToInt64(
string value
)
Si desea obtener la parte entera de ese número, primero debe convertirlo en un número flotante y luego convertirlo en largo.
long l1 = (long)Convert.ToDouble("1100.25");
Puede usar la Math
clase para redondear el número a su gusto, o simplemente truncar ...
FormatException
si ejecuta esto en la entrada especificada.
También puede utilizar long.TryParse
y long.Parse
.
long l1;
l1 = long.Parse("1100.25");
//or
long.TryParse("1100.25", out l1);
http://msdn.microsoft.com/en-us/library/system.convert.aspx
l1 = Convert.ToInt64(strValue)
Aunque el ejemplo que dio no es un número entero, no estoy seguro de por qué lo quiere como largo.
No podrá convertirlo directamente en largo debido al punto decimal, creo que debería convertirlo en decimal y luego convertirlo en largo, algo como esto:
String strValue[i] = "1100.25";
long l1 = Convert.ToInt64(Convert.ToDecimal(strValue));
¡espero que esto ayude!
long se representa internamente como System.Int64, que es un entero de 64 bits con signo. El valor que ha tomado "1100.25" es en realidad decimal y no entero, por lo que no se puede convertir a largo.
Puedes usar:
String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);
para convertirlo a valor decimal
long l1 = Convert.ToInt64(strValue);
Deberias hacer eso.
También puedes hacerlo usando Int64.TryParse
Method. Devolverá '0' si hay algún valor de cadena pero no generó un error.
Int64 l1;
Int64.TryParse(strValue, out l1);
Puede crear su propia función de conversión:
static long ToLong(string lNumber)
{
if (string.IsNullOrEmpty(lNumber))
throw new Exception("Not a number!");
char[] chars = lNumber.ToCharArray();
long result = 0;
bool isNegative = lNumber[0] == '-';
if (isNegative && lNumber.Length == 1)
throw new Exception("- Is not a number!");
for (int i = (isNegative ? 1:0); i < lNumber.Length; i++)
{
if (!Char.IsDigit(chars[i]))
{
if (chars[i] == '.' && i < lNumber.Length - 1 && Char.IsDigit(chars[i+1]))
{
var firstDigit = chars[i + 1] - 48;
return (isNegative ? -1L:1L) * (result + ((firstDigit < 5) ? 0L : 1L));
}
throw new InvalidCastException($" {lNumber} is not a valid number!");
}
result = result * 10 + ((long)chars[i] - 48L);
}
return (isNegative ? -1L:1L) * result;
}
Se puede mejorar aún más: