
こんにちは。
ある12桁~24桁の数字に+1をした数字を表示しようとしています。
int型とfloat型が16桁以上の数字が扱えないようなので、おかしくなってしまいます・・・
1111111111111111の数字に+1をすると
1.1111111111111E+15となります・・・。
これをどうにかできるようにしたいので、
この数字の最後の2桁で文字を分解し
その2桁に+1をして、
再び
最後の2桁とそれ以前の文字列とを足して
元の桁数にしようと考えました。
しかし、この最後の2桁で文字を分解し、各変数か配列に収める方法がわかりません・・・
何かよい方法もしくは関数などありませんか?
どうか、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
長い数値で構成される文字列に+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");
?>
No.3
- 回答日時:
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";
?>
ご回答ありがとうございます。
サーバーの環境上PEARを使用することができませんので、
確認をすることが出来ませんでした・・・
問題は#2の方の回答で解決しました。
どうもありがとうございました。
No.1
- 回答日時:
111・・・を10進数で取り扱うにはphpは精度が
足りないようです。
もし2進数であれば、10進数計算で4294967295まで
数値として扱えるようですが、いかがでしょうか?
<?PHP
print decbin(4294967295);
?>
回答ありがとうございます。
2進数での扱いですが、
111・・・の段階で2進数にするのは考えましたが+1の仕方がわからずに断念しました・・・
できれば、このあたりを教えて頂けないでしょうか?
>10進数計算で4294967295
ですが、4294967295だと10桁までしか数値で扱えないとうことでしょうか?
マックスで24桁まで扱いますので、これだと無理だと思うのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
PHPを使って、別サイトの一部を...
-
ファイルの遷移がうまく行われ...
-
submitで思うようにページが遷...
-
BASIC認証のフォームをデザイン...
-
重複を防ぐ記述について教えて...
-
PHPで画像の渡しが上手く行きま...
-
htmlspecialcharsが機能してい...
-
PHPについて。
-
phpでcookieがうまく保存されない
-
phpでこの記述をもっと簡単に書...
-
php エラー
-
PHP MySql 画像を取得
-
PHP でメールフォームを作成したい
-
marginの値でマイナス値を設定...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php文字列中のシングルクオート...
-
GETの値について
-
include/require文へのバリデー...
-
特定の漢字に\\マークが入って...
-
外部参照のランダムリンクについて
-
PHP3の文字化け
-
PHPにおいて16進数のアスキー文...
-
PHPのエスケープシーケンスに関...
-
0dで始まる文字列の比較がうま...
-
PHPのGETとPOSTの処理を学習中...
-
PHPでカンマ区切り文字列を数値...
-
パラメーター付きのURLをリダイ...
-
PHPでPが2個あるので分かりず...
-
リダイレクトできません。クエ...
-
PHPにおいて、配列データをMySQ...
-
urldecodeについて
-
hexdec(uniqid())でE+15が付く
-
検索に関する文字コード
-
仕様ならしようがない(洒落)
-
文字列に含まれている「,」をカ...
おすすめ情報