Jak mogę przekonwertować dane z ciągu na długie w C #?
Mam dane
String strValue[i] ="1100.25";
teraz chcę to mieć
long l1;
Jak mogę przekonwertować dane z ciągu na długie w C #?
Mam dane
String strValue[i] ="1100.25";
teraz chcę to mieć
long l1;
Odpowiedzi:
Ta odpowiedź już nie działa i nie mogę wymyślić nic lepszego niż inne odpowiedzi (patrz poniżej) wymienione tutaj. Przejrzyj je i zagłosuj na nie.
Convert.ToInt64("1100.25")
Podpis metody z MSDN:
public static long ToInt64(
string value
)
Jeśli chcesz uzyskać część całkowitą tej liczby, musisz najpierw przekonwertować ją na liczbę zmiennoprzecinkową, a następnie rzucić na długość.
long l1 = (long)Convert.ToDouble("1100.25");
Możesz użyć Math
klasy, aby zaokrąglić liczbę, jak chcesz, lub po prostu skrócić ...
FormatException
jeśli uruchomisz to na określonym wejściu.
Możesz także użyć long.TryParse
i 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)
Chociaż podany przykład nie jest liczbą całkowitą, więc nie jestem pewien, dlaczego chcesz, aby był długi.
Nie będziesz w stanie zamienić go bezpośrednio na długi z powodu przecinka dziesiętnego, myślę, że powinieneś zamienić go na dziesiętny, a następnie zamienić na długi, coś takiego:
String strValue[i] = "1100.25";
long l1 = Convert.ToInt64(Convert.ToDecimal(strValue));
mam nadzieję że to pomoże!
long jest wewnętrznie reprezentowany jako System.Int64, który jest 64-bitową liczbą całkowitą ze znakiem. Wartość, którą wybrałeś "1100,25" jest w rzeczywistości dziesiętną, a nie całkowitą, dlatego nie można jej zamienić na długość.
Możesz użyć:
String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);
aby przekonwertować go na wartość dziesiętną
long l1 = Convert.ToInt64(strValue);
Że należy to zrobić.
Możesz również użyć Int64.TryParse
metody. Zwróci „0”, jeśli ich wartość jest ciągiem znaków, ale nie wygenerowała błędu.
Int64 l1;
Int64.TryParse(strValue, out l1);
Możesz stworzyć własną funkcję konwersji:
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;
}
Można go dalej ulepszyć: