Tamsayıdan BigInteger'a dönüştürme


130

Tamsayı türünde bir değişkeni BigInteger'a dönüştürmenin herhangi bir yolu olup olmadığını merak ediyordum. Tamsayı değişkenini yazmayı denedim, ancak dönüştürülemez tür yazan bir hata alıyorum.


12
Javadocs okuyarak oldukça kolay bir şekilde çözülebilecek BigInteger hakkında birkaç soru sordunuz. Cevabımdaki bağlantıyı takip edin ve BigInteger'ın sahip olduğu tüm yöntemleri ve kurucuları kontrol edin.
jjnguy

Yanıtlar:


239

İstediğiniz yöntem BigInteger # valueOf (uzun val) .

Örneğin,

BigInteger bi = BigInteger.valueOf(myInteger.intValue());

Önce bir String yapmak gereksiz ve istenmeyen bir durumdur.


2
@Mich, hayır. Tam sayı ise, Java sizin için otomatik olarak genişletecektir. (OP bir
Tamsayısına

Bu da işe yarar. Bir Tamsayı üzerinde intValue () taşmaz, bu nedenle valueOf çağrısı int'i uzun bir değere genişletir. Bu örnekte longValue () ve intValue () kullanmak arasında gözle görülür bir fark yoktur, ancak eğer Long ile başlasaydı, longValue () kullanmak isteyecektir.
jbindel

2
Amar, bu diğer String-tabanlı yaklaşımlara benzer. Burada kaçınılması gereken en önemli şey, Dizelerin herhangi bir üretimi veya ayrıştırılmasıdır.
jbindel

1
String kullanmanın size yanlış cevap vereceği anlamına gelmez, ancak bilgisayar için fazladan bir iştir. Örneğin, yan taraftaki eve yürüyerek gidebilirsiniz ya da ters yöne gidip neredeyse dünyanın her yerine gidebilirsiniz. Yine de oraya varırsınız ve hızlı bir roket uçağınız varsa, ne kadar sürdüğünü fark etmeyebilirsiniz, ancak bu israftır ve biraz daha uzun sürer.
jbindel

1
Ve myInteger'ın boş olduğu durumlarda NPE olacaktır.
Wizzard

-4

Bu şekilde yapabilirsiniz:

    Integer i = 1;
    new BigInteger("" + i);

5
Yapabilirsin ama neden yapayım? Zaten kabul edilmiş cevapta çok daha iyi bir çözüm önerilmektedir.
Colin

Tamsayı matematik gerçekleştirmek için dizeler yapmak, saymak isteyeceğinizden daha fazla CPU döngüsü israfına neden olur.
jbindel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.