【PHP】08. 算術運算
【PHP】08. 算術運算
此文章也有影片介紹,可以搭配影片一起學習!
01. 算術運算 (所屬課程)
這一堂課要講的是算術運算子,甚麼是算術運算子呢?簡單來說就是我們小時候學的加減乘除(+-*/)。
話不多說,咱們先來練習吧!
加法(+)與減法(-)
〈加法〉
範例:
$number = 10;
$value = $number + 1;
echo $value;
?>
將右邊的值10帶入第二行的右邊$number(可以想成代換的概念),則10 + 1 = 11,當echo $ value時,
輸出結果:
如果你對以上的做法還不熟悉的話,也可以在第二行右邊加上小括號,
小括號內的值會先被計算,在視覺上也比較容易看懂。
範例:
$number = 10;
$value = ($number + 1);
echo $value;
?>
輸出結果:
〈減法〉
範例(整數):
$number = 15;
$value = $number - 2 + 1;
echo $value;
?>
輸出結果:
範例 (使用浮點數):
$number = 15.5;
$value = $number - 2 + 1;
echo $value;
?>
輸出結果:
當你不確定輸出的值是整數還是浮點數,可以利用var_dump()測試
範例:
$number = 15.5;
$value = $number - 2 + 1.5;
var_dump( $value );
echo $value;
?>
輸出結果:
因此,我們可以從這個範例了解,就算輸出結果為整數,不代表PHP的解析就是整數(也有可能是浮點數),但一般而言只要了解 PHP 運作背後的原理,重點還是算出正確的值即可。
乘法(*)與除法(/)
〈乘法〉
範例:
$number1 = 10;
$value1 = $number1 * 5;
echo $value1;
?>
輸出結果:
接下來利用var_dump()測試印出來的數值是整數還是浮點數
範例:
$number1 = 10.2;
$value1 = $number1 * 5;
var_dump( $value1 );
echo $value1;
?>
輸出結果:
範例:
$number1 = 10;
$value1 = $number1 * 5;
var_dump( $value1 );
echo $value1;
?>
輸出結果:
〈除法〉
範例:
$number2 = 10;
$value2 = $number2 / 5;
var_dump( $value2 );
echo $value2;
?>
輸出結果:
整數除以整數,var_dump()下仍是整數。
範例:
$number2 = 12;
$value2 = $number2 / 5;
var_dump( $value2 );
echo $value2;
?>
輸出結果:
餘數(%)
餘數的定義:12除以5等於2於2,餘數為2,程式語言以百分比(%)為餘數的表示符號。
範例:
$number3 = 12;
$value3 = $number3 % 5;
var_dump( $value3 );
echo $value3;
?>
輸出結果:
先乘除後加減?
範例:
$result = 1 * 2 + 3;
echo $result;
?>
輸出結果:
那如果我們把1*2放到後面去,輸出結果仍然是5。
範例:
$result = 3 + 1 * 2;
echo $result;
?>
輸出結果:
如果我們把1*2改成2*2,輸出結果為7。
範例:
$result = 3 + 2 * 2;
echo $result;
?>
輸出結果:
如果嘗試利用小括號讓特定區塊 (3 + 2 )先處理,輸出結果為10。
範例:
$result = (3 + 2 ) * 2;
echo $result;
?>
輸出結果:
結論:先乘除後加減,但有小括號內部的值優先處理。
看了這麼多範例,是不是能提供練習題來小試身手呢?
沒問題,這裡準備了一道練習題能整合上述所學內容,
[練習] 計算1783秒等於幾小時幾分幾秒?
1. 首先,先定義一個變數代表總秒數 $total_seconds = 1783
2. 接下來定義一個變數代表小時 $hour ,一小時代表60秒*60分,
因此$hour= $total_seconds / ( 60 * 60),而小時數為整數,
可利用intval()語法,將答案無條件捨去成整數,
則$hours = intval($total_seconds / ( 60 * 60));
3. 接下來定義一個變數代表分鐘 $minutes,
一小時有60分鐘,所以$total_seconds/60是總分鐘數,
再用總分鐘數除以60,除的盡的就會變成小時(小時的值已在第二步驟處理)
除不盡的餘數就是分鐘數。因此公式可寫成 $minutes= ( $total_seconds /60)%60, 這部分若比較難理解可以用下列方式帶入數字看看
若 $total_seconds=1783秒
1783秒/60秒=29.717分
29.717分 / 60分(1小時) 除不盡.,所以餘數是29.717分(29分43秒)
若 $total_seconds=3683秒
3683秒/60秒=61.383分
61.383分 / 60分(1小時) 除的盡.,所以餘數是1.383分(1小時1分23秒)
但此時分鐘數會有小數點問題,因此我們可以使用floor()語法, 將答案無條件捨去後再當作餘數則$minutes = floor($total_seconds / 60) % 60;
4.接下來定義一個變數代表秒數,總秒數除以60的餘數為秒數,因此公式可以直接寫成$seconds = $total_seconds % 60;
5.接著echo $hours . "小時" . $minutes . "分鐘" . $seconds . "秒";
6.答案為 0小時29分鐘 43秒
範例:
$hours = intval($total_seconds / ( 60 * 60));
$minutes = floor($total_seconds / 60) % 60;
$seconds = $total_seconds % 60;
echo $hours . "小時" . $minutes . "分鐘" . $seconds . "秒";
輸出結果:
因為我們已經把公式都設計好了,接下來只要修改變數$total_seconds的值,就可以自動計算了!
如果你想要練習的話,也可以試著把天(Day)加進來練習看看!
自動轉型別
當php遇到一連串數值型的字串與算術運算子時,會自動將型別轉成數字相加
範例:
var_dump("1" + "2");
輸出結果:
以上為數學的基本運算,這堂課先到這裡,練習題要做喔。
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!