重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは。
ある12桁~24桁の数字に+1をした数字を表示しようとしています。
int型とfloat型が16桁以上の数字が扱えないようなので、おかしくなってしまいます・・・
1111111111111111の数字に+1をすると
1.1111111111111E+15となります・・・。
これをどうにかできるようにしたいので、
この数字の最後の2桁で文字を分解し
その2桁に+1をして、
再び
最後の2桁とそれ以前の文字列とを足して
元の桁数にしようと考えました。
しかし、この最後の2桁で文字を分解し、各変数か配列に収める方法がわかりません・・・
何かよい方法もしくは関数などありませんか?

どうか、よろしくお願いします。

A 回答 (3件)

長い数値で構成される文字列に+1するなら、単純に計算すればいいかも。


サンプル
<?php
function str_add1($numStr){
$rev = strrev($numStr);#逆にする
$len = strlen($numStr);#桁数を求める
$carry = 1;
for($i=0;$i<$len;$i++){
$n=ord($rev[$i])-ord("0") + $carry;
if($n>9){
$carry=1;
$n-=10;
} else {
$carry=0;
}
$rev[$i]=chr(ord("0")+$n);
}
if($carry==1){
$rev .= $carry;
}
return strrev($rev);
}
$longNumStr="1234567890123456789012345";
print str_add1($longNumStr);
print "\n";
print str_add1("99999999999999999999");
?>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
見事に解決しました。
なるほどこんな方法があったんですね・・・
勉強になりました。

お礼日時:2006/04/11 15:44

PEARを使う方法もあります


<?php
include_once 'Math/IntegerOp.php';
$i1 = new Math_Integer('111111111111111111111111');
$i2 = new Math_Integer('1');
$res = Math_IntegerOp::add($i1, $i2);
echo 'i1 + i2 = '.$res->toString()."\n";
?>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
サーバーの環境上PEARを使用することができませんので、
確認をすることが出来ませんでした・・・
問題は#2の方の回答で解決しました。
どうもありがとうございました。

お礼日時:2006/04/11 15:43

111・・・を10進数で取り扱うにはphpは精度が


足りないようです。

もし2進数であれば、10進数計算で4294967295まで
数値として扱えるようですが、いかがでしょうか?

<?PHP
print decbin(4294967295);
?>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
2進数での扱いですが、
111・・・の段階で2進数にするのは考えましたが+1の仕方がわからずに断念しました・・・
できれば、このあたりを教えて頂けないでしょうか?

>10進数計算で4294967295
ですが、4294967295だと10桁までしか数値で扱えないとうことでしょうか?
マックスで24桁まで扱いますので、これだと無理だと思うのですが・・・

お礼日時:2006/04/11 00:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!