Discussion:
[問題] 當數字超過預設範圍的時候
(时间太久无法回复)
黃金跛腳
2007-04-17 06:36:18 UTC
Permalink

int -2^31 ~ 2^31-1

當我需要用到的數都比較大像是2^64, 2^96, 2^128
這些數都不能寫
宣告都不能宣告

當然double可以表示
但是他是用浮點數表示
超過16個數就省略
我需要的是確切的值 i.e. 123456789876545321456

請問有人碰過相關的問題嗎?

--

Not all men are stupid ~ Some are bachelors

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.184.3
小安
2007-04-17 06:41:54 UTC
Permalink
※ 引述《sanhom (黃金跛腳)》之銘言:
: 像
: int -2^31 ~ 2^31-1
: 當我需要用到的數都比較大像是2^64, 2^96, 2^128
: 這些數都不能寫
: 宣告都不能宣告

如果是要宣告超出 int 範圍但還在 long 內的值必須這樣寫

long l = 123456789L;

這是因為 Java 的整數 Literal 預設是 int 的關係。



如果範圍超出 long 又必須要求精準的話

請使用 BigInteger / BigDecimal

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.131.89.27
黃金跛腳
2007-04-17 09:04:57 UTC
Permalink
※ 引述《tkcn (小安)》之銘言:
: ※ 引述《sanhom (黃金跛腳)》之銘言:
: : 像
: : int -2^31 ~ 2^31-1
: : 當我需要用到的數都比較大像是2^64, 2^96, 2^128
: : 這些數都不能寫
: : 宣告都不能宣告
: 如果是要宣告超出 int 範圍但還在 long 內的值必須這樣寫
: long l = 123456789L;
: 這是因為 Java 的整數 Literal 預設是 int 的關係。
: 如果範圍超出 long 又必須要求精準的話
: 請使用 BigInteger / BigDecimal
先感謝回答~

現在用BigInteger都沒什麼問題
但有一個比較麻煩的地方就是有function可以直接把int,long,double
這些數字直接轉成BigInteger嗎?
沒有查到有toBigInteger這種東西 XD

還是說只能轉成String再轉成BigInteger呢

--

Not all men are stupid ~ Some are bachelors

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.184.3
黃金跛腳
2007-04-17 16:43:51 UTC
Permalink
※ 引述《PsMonkey (人生第一個第一名)》之銘言:
: ※ 引述《TonyQ (骨頭)》之銘言:
: Java 裡頭都是稱為 method
: : 轉成String再轉成BigInteger,
: : 這不是很合理嗎?_?
: ==.===|||
: [舉手] 異議!! 這樣不合理而且也應該也不好
: 明明就有 BigInteger.valueOf() 可以用
: 另外就是...
: double 轉成 BigInteger 本身就不合理 [指原 po]
: ====
: 好吧,這篇也站內
版主回答的都一針見血 XD
但是valueOf裡面放的只能是long阿

而我想用double的原因是
我要 BigInteger * double 阿

而只能BigInteger * BigInteger
才想把double轉成BigInteger

後來發現為何不直接用BigDecimal做就好呢
BigDecimal還可以轉BigInteger............Orz

--

Not all men are stupid ~ Some are bachelors

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.184.3

Loading...