• 締切済み

13桁の計算をnumber_formatで行うこと

13桁の計算を行います。 【通常】 1000000000000 + 1 → 1E+12 【number_formatを使う】 number_format(1000000000000 + 1,0,'.',''); → 1000000000001 この「1000000000001」という結果を得たいがために「number_format」を使います。 何か問題があるでしょうか。 ちなみに、PHPのバージョンは4.x.xで、「bcmath.scale」は無指定です。

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

回答No.2

<?php echo bcadd( "100000000000000", "11" ); ?> 100000000000011 > 何か問題があるでしょうか。 64bitなら整数計算の結果は得られるでしょうが、32bitでは計算不能なので、はっきり32bitでは動かさないとか条件を特定できないなら任意精度の関数使った方が良いと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

文字列で処理するってことですよね? 精度の問題がないとはいえないですが sprintf的な処理でいいんじゃないですか? print sprintf("%.0f",1000000000000 + 1);

関連するQ&A

  • 大きな桁の計算はどうやるの?

    double型で計算しきれない桁数のの計算はどうすればいいのでしょうか。 4桁の問題を80問やったときにまぐれで全問正解する確率を計算したいのですが int i; double x=4; for(i=1;i<80;i++){ x = x * 4; } printf(" %f 分の1 \n",x); これでは結果が e と出てしまって計算できません。 どなたか教えてください><

  • ゼロとNULLを区別して number_formatしたい

    環境:MySQL4.0.25 と PHP4.3.11の組み合わせで、SQLで select data1 from mytable として、取り出したdata1には、次のようにNULLとゼロと数値が 混在しています。 4334.0028 8893.212233 4334.2 <NULL> 0 2.002 9893 桁がバラバラなので、これらに number_format(data1,2) としたら、 NULLまでもが0.00と表示されてしまいます。 今回、NULLとゼロ(0.00)は区別しなければならなので、 echo ($data1 == '') ? '' : number_format($data1,2) ; としましたが、効きません。WWWでイコール3つ(===)演算子を 使えば回避できるような情報を見かけましたが echo ($data1 !== '') ? number_format($data1,2) : '' ; としても、状況変わらず。何かうまい方法はないでしょうか。 なお、SQL側で format(data1,1) とするのはナシとしてご教示いただけ ますと幸いです(data1でいろいろ計算するのでformatされた値が 出てくると誤差の原因になってしまうためです)。

    • ベストアンサー
    • PHP
  • 小数部を含む数字の3桁区切りで小数部を表示するには?

    小数部を含む数字を“number_format”で桁区切りすると、小数部が切り捨てられてしまいますが、小数部もそのまま表示するにはどうしたらよいでしょうか? 例えば、“123456.789”を“number_format(123456.789)”とすると、返り値は“123,456”となってしまうのを、“123,456.789”としたいのです。 御存知の方がおられましたら教えていただけますか? ちなみに、PHPは“4.4.4”で、レンタルサーバーなのでバージョンアップできません。

    • ベストアンサー
    • PHP
  • 小数点4桁での四捨五入がうまくいきません

    エクセルで次のような計算をさせます。 A2 に1.8、B2に0.075、C2に0.075、 D2に= A2*B2*C2 、E2に=roundup(D2,4) D2の計算結果は 0.010125 です。小数点第5桁目の値を参照して第4桁目で四捨五入したいのですが、roundupでは0.0102、rounddownでは0.0101です。 表示させたいのは0.0101です。この場合、rounddownを使えば問題ないのですが、逆にrounddownだと小数点以下4桁目の四捨五入がうまくいかない場合もあります。 例えば A3に2.7 B3に0.08、C3に0.08 があり、E3にすべての値を掛けた結果を表示させると0.01728となります。 =roundup(E3,4)では0.0173となり、rounddownでは0.0172となります。この場合はroundup関数の結果である0.0173が求める数値です。 A列、B列,C列に任意の数字が入り、E列に4桁目で四捨五入した正確な値を求めたいのですが、なにか良い方法はないでしょうか。 VBAを使っても構いません。ちなみにこれは木材の材積計算に使用する目的です。 よろしくお願いします。

  • VBA 年の下二けたを表示させる Format

    VBA(version7.1)で年の下二けたを表示させたいと思っています。 Format関数では両者とも5,  date関数はyear関数を使うと1905と表示 right関数を使うと20と意図通り表示します。 このような結果になるのはなぜでしょうか。 詳しい方よろしくお願いします。 Sub test() Cells(1, 1) = Format(Year(Date), "yy") Cells(2, 1) = Format(Year(Now), "yy") Cells(1, 2) = Right(Year(Date), 2) Cells(2, 2) = Right(Year(Now), 2) Cells(1, 3) = Year(Date) Cells(2, 3) = Year(Now) End Sub 実行結果 5_20_1905/7/12 5_20_2020

  • 7ナンバーについて

    国内で登録される自動車にはナンバープレートか付けらています。 一般的に見かけるのは クラウンやマークIIに付けられる「京都300」「名古屋301」又は希望制の「大阪330」 カローラやプレミオに付けられる「広島500」「品川501」又は希望制の「静岡530」         といったナンバーが一般普通車に付けられます。 以前の2桁ナンバーの時、「大阪70」「名古屋77」ってのも存在しました。これは多分50~59が終わったからだと思いますが。 しかし、3桁になってからは無くなったのかと思ったらhttp://www9.plala.or.jp/hiyotrio/newpage012.htm にもあるように「700~799」っていうのも5ナンバー枠に存在するようにはなっています。 ★そこで質問です。 どうすれば700~799のナンバーを付けれますか? 以前、70・71・・・・というナンバーが存在せず3桁に移行してしまった陸運局管内で登録できるかってのも問題です。 原則として希望ナンバーは下の部分1~9999しかできない訳ですが、もし希望ナンバー用の530・531・・・・ってのが全て終わらないと7ナンバーにはできないんですか? ★下の部分の指定はいいですが、右上が7ナンバーにできればいいです。

  • 計算を早くする~~有効数字の取り方

     いつだったか、塾で、    例えば有効数字2桁で答えを出せ、という問題のとき、  計算途中で、 X=123×240=26520 が出て  そのXを使ってさらに計算を続けていくなら、  最後の答えまで到達してなくても、 26520を27000として  計算をしていい。って聞いたのですが、本当ですか?  こないだ、有効数字3桁の問題を計算してら0.01ズレてしまいました。  これでも、受験では正解扱いにしてもらえるのでしょうか?    

  • 特殊なナンバー

    こんにちは、honiyonです。   通常、車のナンバーは、   品川50   な55-55   みたいなフォーマットになっていますよね。   たまに以下のようなナンバーをみかけます。   品   川55-55   55-55は川と並んでますが、本当は品と川の間位の高さです。   これはどんな場合に交付されるナンバーなのでしょうか?   今日見たのは、セダン型のベンツについていました。   白地に緑字で、ふちが赤く塗られていました。   宜しくお願いします(.. #因みに品川50 な55-55は適当なものです。意味はないです。

  • この場合のフォートランのフォーマットどうすれば?

    今もともとあるデータをa倍してb引く値を求めそれを違うフォーマットで書き出したいのですがどういうふうに書けばいいのでしょう? 元のデータ   17346 17371 17420 17450 17409 17327 17289 17276 17237 17225 17277 17344 17365 17304 17224 17204 17223 17209 17195 17245 17274 17285 17321 17301 17302 17352 17355 17368 17408 17438 17428 17338 17300 17356 17378 17375 17350 17285 17251 17234 全て5桁の正のあたいの数値が上には40個しかのせませんでしたが8x5000あります 書き出したいデータ 0.623E-001 0.108E+000 0.851E-001 0.128E+000 0.110E+000 0.125E+000 0.105E+000 0.126E+000 0.107E+000 0.114E+000 0.855E-001 0.834E-001 0.468E-001 0.326E-001 -0.105E-001 0.623E-001 0.108E+000 0.851E-001 0.128E+000 0.110E+000 0.125E+000 0.105E+000 0.126E+000 0.107E+000 0.114E+000 0.855E-001 0.834E-001 0.468E-001 0.326E-001 -0.105E-001 0.623E-001 0.108E+000 0.851E-001 0.128E+000 0.110E+000 0.125E+000 0.105E+000 0.126E+000 0.107E+000 0.114E+000 もとデータの値に定数をかけて引いた値を 空欄2つ(値が負の場合は1つ),値を0.~(小数点3桁まで),10の何乗か(10の2乗ならE+002,10のマイナス100乗ならE-100) というフォーマットで5x8000にしたいのですこのときはフォートランでどう書けばいいのでしょうか。 ソフトはMicrosoft Visual Studio 2008をつかっています。 よろしくお願いします

  • マクローリン展開を使って、x^3の項までを計算。

    微分の問題です。 次の関数をマクローリン展開を使って、x^3までの項を計算せよ。 f(x)=e^(1/1-x) とりあえず、計算したのは、 f(0)=e f'(x)= 1/(1-x)^2・e^(1/1-x) より、f'(0)=e というところまでは計算しました。 ここからの途中計算~答えまでを、 どなたかわかる方がいらっしゃいましたら、教えてください。 どうかよろしくお願いします。 ちなみに、答えは、e(1+x+ 3x^2/2 + 13x^3/6…)になります。