Bagaimana saya bisa mengubah data dari string menjadi panjang di c #


102

Bagaimana saya bisa mengonversi data dari string menjadi panjang di C #?

Saya punya data

String strValue[i] ="1100.25";

sekarang saya ingin masuk

long l1;

1
Long mewakili bilangan bulat. Anda telah memberikan non-integer. Apa yang ingin Anda lakukan dengan itu?
Jon Skeet

1
Bagaimana jika strValue adalah "1100.75"? Lihat: stackoverflow.com/questions/633335/…
magma

@magma: jika Anda mengubahnya menjadi desimal maka itu akan membulatkan angka, yaitu dalam hal ini jika nomor yang diberikan adalah 1100.75 maka akan menghasilkan 1101.
love Computer science

1
@charlie Saya hanya mengangkat masalah, karena MayP tampaknya tidak sepenuhnya menyadari implikasinya di sini. Dia mungkin ingin menghilangkan bagian non-integer tanpa pembulatan apapun, dan itu bagus, asalkan itu yang dia inginkan. Terima kasih.
magma

Jawaban:


187

Jawaban ini tidak lagi berfungsi, dan saya tidak dapat menemukan yang lebih baik dari jawaban lain (lihat di bawah) yang tercantum di sini. Harap tinjau dan pilih mereka.

Convert.ToInt64("1100.25")

Tanda tangan metode dari MSDN:

public static long ToInt64(
    string value
)

3
Beginilah cara saya melakukannya. Harus ditandai sebagai jawaban yang benar.
sanpaco

2
Ini akan memberikan string tidak dalam format pengecualian yang benar.
Badhon Jain

Ini tidak berhasil. Kesalahan pengecualian format sistem. Beberapa masalah dengan rangkaian karakter dalam format yang salah.
Ricardo Araújo

Benar .... sepertinya ini tidak lagi berfungsi, seperti yang terjadi pada 2013. Saya akan segera memposting pembaruan.
Will Bellman

46

Jika Anda ingin mendapatkan bagian bilangan bulat dari bilangan tersebut, Anda harus terlebih dahulu mengubahnya menjadi bilangan mengambang, lalu diubah menjadi panjang.

long l1 = (long)Convert.ToDouble("1100.25");

Anda dapat menggunakan Mathkelas untuk mengumpulkan nomor sesuka Anda, atau hanya memotong ...


Ini akan memberi Anda FormatExceptionjika Anda menjalankan ini pada input yang ditentukan.
Andrew Savinykh

1
@zespri, tidak, setidaknya tidak di sebagian besar budaya ... Tapi itu memang akan gagal dalam budaya di mana pemisah desimal bukan "."
Thomas Levesque

16

Anda juga bisa menggunakan long.TryParsedan long.Parse.

long l1;
l1 = long.Parse("1100.25");
//or
long.TryParse("1100.25", out l1);


6

Anda tidak akan dapat mengubahnya secara langsung menjadi panjang karena koma desimal saya pikir Anda harus mengubahnya menjadi desimal dan kemudian mengubahnya menjadi panjang seperti ini:

String strValue[i] = "1100.25";
long l1 = Convert.ToInt64(Convert.ToDecimal(strValue));

semoga ini membantu!


3

long secara internal direpresentasikan sebagai System.Int64 yang merupakan integer bertanda 64-bit. Nilai yang Anda ambil "1100.25" sebenarnya adalah desimal dan bukan integer sehingga tidak dapat diubah menjadi panjang.

Kamu bisa memakai:

String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);

untuk mengubahnya menjadi nilai desimal



1

Anda juga dapat melakukannya menggunakan Int64.TryParseMetode. Ini akan mengembalikan '0' jika itu adalah nilai string apa pun tetapi tidak menghasilkan kesalahan.

Int64 l1;

Int64.TryParse(strValue, out l1);

1

Anda dapat membuat fungsi konversi Anda sendiri:

    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;
    }

Itu dapat ditingkatkan lebih lanjut:

  • kinerja bijaksana
  • membuat validasi lebih ketat dalam arti bahwa saat ini tidak peduli apakah karakter setelah desimal pertama bukan digit
  • tentukan perilaku pembulatan sebagai parameter untuk fungsi konversi. itu saat ini melakukan pembulatan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.