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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

4回答

1304閲覧

5.6を5.5にするやり方

aaaaaaaa

総合スコア501

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2016/08/05 11:12

printfという文字列を整形する関数で5.5555という数値を5.5に整形したいのですが、なぜか5.6になってしまいます。四捨五入されたのでは、と思ったのですがどうすれば5.5に整形できるのでしょうか。

php

1$five = 5.5555; 2//+は、符号指定子、0は、パディング指定子、-は、アライメント指定子(左寄せ、右寄せ)、3は、表示幅指定子、.1は、精度指定子、fは、型指定子。 3$seikei_go = printf("%+0+3.1f",$five); 4print "●".$five."は、5.5になるのか?".$seikei_go."●";

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

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

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

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

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

guest

回答4

0

ベストアンサー

参加します

php

1 2$five = 5.5555; 3printf("%+0+3.1f",$five-0.05); 4 5$five = 5.5955; 6printf("%+0+3.1f",$five-0.05); 7 8$five = 5.5055; 9printf("%+0+3.1f",$five-0.05);

投稿2016/08/05 14:48

A.Ichi

総合スコア4070

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

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

退会済みユーザー

退会済みユーザー

2016/08/05 14:55

これだ!w
aaaaaaaa

2016/08/08 11:08

ご回答有難うございます。 重ね重ね申し訳ありません。printf関数が、値を四捨五入するときは、小数点第二位を見て処理をしている特性を利用しているのでしょうか。第二位で処理するのは、不変ですか。引数などで小数の位を変更できるものなのでしょうか。
A.Ichi

2016/08/08 11:14

指定桁(3.1f)の次の小さい桁を四捨五入する事を前提としています。3.2fとすれば、少数点第3桁目を四捨五入します。その時は0.005を引いてあげると期待する値5.55となります。
guest

0

普通に切り捨て方法はご存知だと思います。
ので、要件は 「printf() のみで特定桁数で切り捨てる方法の有無」と読み取りました。

マニュアルのフォーマットには、丸め方が書いてないんですね。確かに切り捨てとかも出来そうです。

が、printf() は表示コントロール(整形)なので、切り捨てのロジックは別途設けてしまったほうがきれいかと。

無理やり 5.5 にするのは考えてみましたw
printf("%.3s",(string)$five)
文字列に変換すれば、切り捨てです。
が、桁数固定です^^;

投稿2016/08/05 12:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

aaaaaaaa

2016/08/08 11:11

ご回答有難うございます。 >>printf() は表示コントロール(整形)なので、切り捨てのロジックは別途設けてしまったほうがきれいかと。 なるほど、微塵も思っておりませんでした。関数の特性或いは、趣旨とは違うものは、隔離するのですね。勉強になります。
退会済みユーザー

退会済みユーザー

2016/08/08 12:11

マニュアルに丸め方法が書いていないことが切り捨てロジックを分けたほうがいいとした判断の裏の基準です。 本当に四捨五入しているという根拠が確認できない状態で、その機能を使うのは気持ち悪いなぁと。マニュアルを見ると副次的に四捨五入(?)しているっぽいし。 今のバージョンで四捨五入していたとしても、他では挙動が違ったり、今後のバージョンで変更がかかった場合にハマる可能性が大なので分けておくのが良いと考えます。 まぁ、事実上、多分四捨五入しているだろうし、今後も変わらないと思うので、それを前提にしてA.Ichi さんのやり方で、切り捨てを実装するのはありと思いますってのが本音ですけどw
guest

0

かけて割るのが普通ですが、文字列として処理すればこんな感じ

PHP

1$five = 5.5555; 2print preg_replace("/(?<=\.\d{1}).+/","",$five)."<br>"; 3print preg_replace("/(?<=\.\d{2}).+/","",$five)."<br>"; 4print preg_replace("/(?<=\.\d{3}).+/","",$five)."<br>"; 5print preg_replace("/(?<=\.\d{4}).+/","",$five)."<br>"; 6print preg_replace("/(?<=\.\d{5}).+/","",$five)."<br>";

投稿2016/08/05 12:41

編集2016/08/05 12:41
yambejp

総合スコア114572

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

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

0

素で間違えた。

こちらを参考にしたらいけます。

投稿2016/08/05 11:20

編集2016/08/05 11:25
Panzer_vor

総合スコア1636

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問