質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

609閲覧

PHPで丸めなくて少数表示したい

chintao1224

総合スコア155

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/08/11 02:31

編集2018/08/11 02:34

PHPで指数表示を少数表示にしたいです。

php

1$val = sprintf("%.7f", 1.23E-4);

これだと小数点以下7桁で丸められているみたいです。
丸めなくて、そのまま小数点表示したいです。

それと丸めのときにあったんですが、右に0がつかないようにしたいです。

どうすればよいか教えてください。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

丸めずにと言うのは無理です。指定した小数点以下桁数で表現しきれないときは次の桁で丸めます。
小数点以下の桁数を指定しないときは6が仮定されます。

右に0がつかないようにしたいです。

これは、正規表現などで削除します。

PHP

1preg_replace("/0+$/","",sprintf("%.7f", 1.23E-4))

投稿2018/08/11 10:41

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namda

2018/08/11 13:53

これだと10.0000000001時など”10.”になってしまいますね。
otn

2018/08/11 13:58

まあ、サンプルなので。10.0がいいのか10.がいいのか10がいいのかにも依ります。
guest

0

そもそも1.23E-4って0.000123って合ってますか?
四捨五入された数字を例に上げてもらえれば良いのですが上記の例だと丸まってませんよね?

小数点以下の切り捨ては泥臭い実装が必要です。

php

1$origin=10.00129; 2$n=7; 3$a = function($origin, $n){ 4 if(!is_numeric($origin)){ 5 return false;//数字以外来た場合の戻り値 6 } 7 $f = $n + 2; 8 $exp = explode('.',sprintf("%.{$f}f",$origin)); 9 return rtrim(rtrim($exp[0] . '.' . substr($exp[1],0,$n),'0'),'.'); 10}; 11 12var_dump($a($origin,$n)); 13var_dump(rtrim(rtrim(strval(floor( $origin * pow( 10 , $n ) )/ pow( 10 , $n )),'0'),'.')); 14 15//泥臭い方法 16//string(8) "10.00129" 17//スマートそうだけど丸め発生(そもそも10の時、尻の0削ってしまい1になるから使えない) 18//string(10) "10.0012899" 19

これはコンピュータが浮動小数点数を扱うとき発生する丸め誤差を回避するために必要です。

投稿2018/08/11 13:34

編集2018/08/11 13:51
namda

総合スコア705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「%.7f」って指定しているからです。

書き方はこれ読むとか。
指定の形式にフォーマット(sprintf)

投稿2018/08/11 02:42

lightwill

総合スコア962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chintao1224

2018/08/11 05:14

$val = sprintf("%.f", 1.23E-4);にしてみたのですが、丸められてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問