Comment puis-je convertir des données de chaîne en long en C #?
J'ai des données
String strValue[i] ="1100.25";
maintenant je le veux
long l1;
Comment puis-je convertir des données de chaîne en long en C #?
J'ai des données
String strValue[i] ="1100.25";
maintenant je le veux
long l1;
Réponses:
Cette réponse ne fonctionne plus, et je ne peux rien trouver de mieux que les autres réponses (voir ci-dessous) énumérées ici. Veuillez les examiner et voter.
Convert.ToInt64("1100.25")
Signature de méthode de MSDN:
public static long ToInt64(
string value
)
Si vous souhaitez obtenir la partie entière de ce nombre, vous devez d'abord le convertir en nombre flottant, puis le convertir en long.
long l1 = (long)Convert.ToDouble("1100.25");
Vous pouvez utiliser la Math
classe pour arrondir le nombre comme vous le souhaitez, ou simplement tronquer ...
FormatException
si vous exécutez ceci sur l'entrée spécifiée.
Vous pouvez également utiliser long.TryParse
et 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)
Bien que l'exemple que vous avez donné ne soit pas un entier, je ne sais pas pourquoi vous le voulez aussi long.
Vous ne pourrez pas le convertir directement en long à cause du point décimal, je pense que vous devriez le convertir en décimal puis le convertir en long quelque chose comme ceci:
String strValue[i] = "1100.25";
long l1 = Convert.ToInt64(Convert.ToDecimal(strValue));
J'espère que cela t'aides!
long est représenté en interne comme System.Int64 qui est un entier signé 64 bits. La valeur que vous avez prise "1100.25" est en fait décimale et non entière, elle ne peut donc pas être convertie en long.
Vous pouvez utiliser:
String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);
pour le convertir en valeur décimale
long l1 = Convert.ToInt64(strValue);
Ça devrait le faire.
Vous pouvez également utiliser la Int64.TryParse
méthode. Il renverra '0' s'il s'agit d'une valeur de chaîne mais n'a pas généré d'erreur.
Int64 l1;
Int64.TryParse(strValue, out l1);
Vous pouvez créer votre propre fonction de conversion:
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;
}
Il peut encore être amélioré: