WEBVTT

1
00:00:00.000 --> 00:00:01.059
こんにちは。

2
00:00:01.059 --> 00:00:04.236
今回はマスのシーリングを紹介します。

3
00:00:04.236 --> 00:00:10.591
これは、数値を正の無限大方向へ丸める、つまり切り上げる静的メソッドです。

4
00:00:10.591 --> 00:00:18.181
天井という意味の名前の通り、小数部分が少しでもあれば、ひとつ上の整数まで引き上げます。

5
00:00:18.181 --> 00:00:25.948
この動画では、書き方と引数、記事の基本例であるページ数の計算、正の数と負の数の動き、

6
00:00:25.948 --> 00:00:33.715
箱詰めや時間への実例、自動変換の注意、そして浮動小数点の誤差まで、実行結果と一緒に学びます。

7
00:00:33.715 --> 00:00:41.482
切り捨てのフロア、四捨五入のラウンドとセットで覚えると、丸めの使い分けがはっきりします。

8
00:00:41.482 --> 00:00:48.013
足りなくならないように多めに確保したい場面で、特に頼りになるメソッドです。

9
00:00:48.013 --> 00:00:55.780
数直線で右隣の整数を探す、というイメージを持つと、正の数でも負の数でも迷わずに済みます。

10
00:00:55.780 --> 00:00:57.908
まず動作環境を確認します。

11
00:00:57.908 --> 00:01:03.800
シーリングはマスオブジェクトに最初から備わる、歴史のとても長い機能です。

12
00:01:03.800 --> 00:01:11.328
クロームとファイアーフォックスでは一以降、サファリでは一以降、エッジでは十二以降で使えます。

13
00:01:11.328 --> 00:01:17.384
アンドロイド版クロームでは十八以降、アイオーエス版サファリでは一以降です。

14
00:01:17.384 --> 00:01:22.949
ノード・ジェイエスではゼロ・十・ゼロという古い版から対応しています。

15
00:01:22.949 --> 00:01:27.695
記事の互換性情報はエムディーエヌのデータに基づく目安です。

16
00:01:27.695 --> 00:01:33.096
現在使われている環境であれば、ほぼどこでもそのまま使えるでしょう。

17
00:01:33.096 --> 00:01:39.152
追加の読み込みは不要で、関数として備わっていることを実機でも確認済みです。

18
00:01:39.152 --> 00:01:40.716
書き方を確認します。

19
00:01:40.716 --> 00:01:45.093
マスのあとにドットを書き、シーリングとカッコを続けます。

20
00:01:45.093 --> 00:01:47.751
引数は丸めたい数値が一つだけです。

21
00:01:47.751 --> 00:01:50.879
戻り値は、その引数以上の最小の整数です。

22
00:01:50.879 --> 00:01:58.696
スライドの例では、四・一が五に切り上がり、すでに整数の四はそのまま四で返ることを実機で確認しました。

23
00:01:58.696 --> 00:02:02.449
ポイントは、小数部分の大きさは関係ないことです。

24
00:02:02.449 --> 00:02:07.921
ゼロ・一でもゼロ・九でも、少しでも小数部分があれば上の整数になります。

25
00:02:07.921 --> 00:02:15.270
変数を渡しても、割り算のような計算式を渡しても、その結果である数値が切り上げの対象になります。

26
00:02:15.270 --> 00:02:18.084
まずはこの基本の形を覚えてください。

27
00:02:18.084 --> 00:02:19.970
記事の基本例を見ます。

28
00:02:19.970 --> 00:02:25.626
二十一割る十の結果をシーリングで切り上げる、とても短いコードです。

29
00:02:25.626 --> 00:02:30.083
実行結果は三で、ノードの実機結果とも一致しています。

30
00:02:30.083 --> 00:02:35.226
二十一・十は二・一ですが、二十一件を十件ずつ表示すると、二ページでは最後の一件が入りきらず、

31
00:02:35.226 --> 00:02:40.368
もう一ページ必要になります。

32
00:02:40.368 --> 00:02:43.454
そのためページ数は三になるわけです。

33
00:02:43.454 --> 00:02:47.396
記事でもこのページ数の場面が想定されています。

34
00:02:47.396 --> 00:02:57.339
まずはこの例をブラウザーのコンソールかノードで実行し、件数を二十に変えると二ページになることも確かめてみてください。

35
00:02:57.339 --> 00:03:01.624
予測してから実行する流れが、理解を深める近道です。

36
00:03:01.624 --> 00:03:03.895
正の数の動きを詳しく見ます。

37
00:03:03.895 --> 00:03:07.627
四・一も四・九も、結果はどちらも五になります。

38
00:03:07.627 --> 00:03:13.468
ゼロ・五は一に、十二・一も十二・九も十三になることを実機で確認しました。

39
00:03:13.468 --> 00:03:20.119
ラウンドが近い方の整数を選ぶのに対して、シーリングは常に大きい方の整数を選びます。

40
00:03:20.119 --> 00:03:26.771
小数部分がどれほど小さくても切り上がるため、必要量を計算するときに不足が出ません。

41
00:03:26.771 --> 00:03:32.044
逆に、金額の端数を切り上げると受け取る側が多めになるため、どちらの方向へ丸めるべきかは、

42
00:03:32.044 --> 00:03:37.317
業務のルールに合わせて選ぶ必要があります。

43
00:03:37.317 --> 00:03:41.048
方向を決めるメソッドだ、と覚えておきましょう。

44
00:03:41.048 --> 00:03:48.836
例えば参加者が三十一人で、一台に十人乗る車を用意する場合も、四台と数えるのが切り上げの発想です。

45
00:03:48.836 --> 00:03:51.442
負の数の切り上げを確認します。

46
00:03:51.442 --> 00:03:55.613
記事の境界例であるマイナス一・二の結果は、マイナス二ではなくマイナス一で、

47
00:03:55.613 --> 00:03:59.783
実機とも一致しました。

48
00:03:59.783 --> 00:04:03.084
マイナス四・七はマイナス四になります。

49
00:04:03.084 --> 00:04:09.166
正の無限大方向とは、数直線で右方向、つまりゼロに近づく方向のことです。

50
00:04:09.166 --> 00:04:13.858
そのため負の数では、見た目には切り捨てに近く見えます。

51
00:04:13.858 --> 00:04:21.503
なおマイナスゼロ・五の結果はマイナスゼロという特殊な値になることも、実機で確認しました。

52
00:04:21.503 --> 00:04:30.712
負の温度や差分を扱うときは、絶対値で考える癖を外し、数直線の右方向へ進むイメージで結果を予測してください。

53
00:04:30.712 --> 00:04:33.840
ここが最も間違えやすいポイントです。

54
00:04:33.840 --> 00:04:36.977
ページ数の計算を、件数を変えて確かめます。

55
00:04:36.977 --> 00:04:44.745
ゼロ件ならゼロページ、二十件なら割り切れて二ページ、二十一件なら三ページになることを実機で確認しました。

56
00:04:44.745 --> 00:04:51.915
割り算の結果がちょうど整数のときは切り上げても値は変わらず、余りがあるときだけページが増えます。

57
00:04:51.915 --> 00:04:56.322
記事が注意する通り、ゼロ件のときにゼロページと表示するか、一ページと表示するかは、

58
00:04:56.322 --> 00:05:00.729
画面の仕様で先に決めるべき事柄です。

59
00:05:00.729 --> 00:05:05.658
一覧画面や検索結果など、実務でとてもよく使う計算なので、総件数を一ページの件数で割って切り上げる、

60
00:05:05.658 --> 00:05:10.588
という型として覚えておきましょう。

61
00:05:10.588 --> 00:05:13.990
もう二つ、実務に近い実例を見ます。

62
00:05:13.990 --> 00:05:15.791
一つ目は時間です。

63
00:05:15.791 --> 00:05:22.594
百二十一分を六十分単位で数えると二・ゼロ一六となり、駐車料金や利用枠のように時間単位で数える場面では、

64
00:05:22.594 --> 00:05:29.397
三時間分として扱う計算になります。

65
00:05:29.397 --> 00:05:32.399
二つ目は重さの単位そろえです。

66
00:05:32.399 --> 00:05:43.604
九十五・三を十で割って切り上げ、十を掛け戻すと百になり、十キロ単位への切り上げができることを実機で確認しました。

67
00:05:43.604 --> 00:05:53.609
箱の数や席数のように、足りなくなると困るものを数えるときは、この切り上げの考え方がそのまま使えます。

68
00:05:53.609 --> 00:05:58.611
必要な量を下回らない、という目的が共通しています。

69
00:05:58.611 --> 00:06:03.414
表示件数を変えたくなった場合でも、割り算の数字を変えるだけで対応できる、

70
00:06:03.414 --> 00:06:08.216
汎用性の高い書き方です。

71
00:06:08.216 --> 00:06:12.217
引数が数値以外の場合の動きも知っておきましょう。

72
00:06:12.217 --> 00:06:17.553
数値の形をした文字列は、自動で数値に変換されて切り上げられます。

73
00:06:17.553 --> 00:06:23.221
スライドの例では、文字列の四・一が五になることを実機で確認しました。

74
00:06:23.221 --> 00:06:26.556
ヌルはゼロとして扱われ、結果はゼロです。

75
00:06:26.556 --> 00:06:35.059
一方、数値にできない文字列を渡すと結果はナンという特別な値になり、引数を省略した場合もナンになります。

76
00:06:35.059 --> 00:06:39.061
無限大を渡した場合は、そのまま無限大が返ります。

77
00:06:39.061 --> 00:06:43.812
自動変換に頼ると意図しない結果を招くことがあるため、実務では渡す前に自分で数値へ変換し、

78
00:06:43.812 --> 00:06:48.564
検証しておく方が安全です。

79
00:06:48.564 --> 00:06:50.564
注意点を二つ挙げます。

80
00:06:50.564 --> 00:06:53.292
一つ目は浮動小数点の誤差です。

81
00:06:53.292 --> 00:07:02.748
計算の結果が本来はちょうど一のはずでも、内部では一・ゼロゼロゼロとわずかに大きい値になることがあります。

82
00:07:02.748 --> 00:07:10.386
その値を切り上げると二になってしまい、スライドの例でもその動きを実機で確認しました。

83
00:07:10.386 --> 00:07:15.478
境界ぎりぎりの計算ほど、誤差の影響を受けやすくなります。

84
00:07:15.478 --> 00:07:17.660
二つ目は丸める時点です。

85
00:07:17.660 --> 00:07:23.116
途中の計算のたびに切り上げると、結果が必要以上に膨らみます。

86
00:07:23.116 --> 00:07:28.571
計算は小数のまま進め、最後に一度だけ切り上げるのが基本です。

87
00:07:28.571 --> 00:07:34.936
金額や在庫のように数が重要な場面では、この二点を先に確認してください。

88
00:07:34.936 --> 00:07:35.876
まとめです。

89
00:07:35.876 --> 00:07:42.296
シーリングは、数値を正の無限大方向へ丸め、引数以上の最小の整数を返すメソッドです。

90
00:07:42.296 --> 00:07:44.332
判断のポイントは三つです。

91
00:07:44.332 --> 00:07:52.789
まず、小数部分が少しでもあればひとつ上の整数になるため、ページ数や箱数のように不足を避けたい計算に向くこと。

92
00:07:52.789 --> 00:07:58.739
次に、負の数ではゼロに近い方向へ進み、マイナス一・二がマイナス一になること。

93
00:07:58.739 --> 00:08:05.473
そして、浮動小数点の誤差が境界に影響するため、丸めるのは最後に一度だけにすることです。

94
00:08:05.473 --> 00:08:11.581
切り捨てたいときはフロア、近い方へ丸めたいときはラウンドと使い分けてください。

95
00:08:11.581 --> 00:08:17.845
まずは記事の基本例をコンソールで実行し、件数を変えて結果を予測してみてください。

96
00:08:17.845 --> 00:08:19.254
お疲れさまでした。

97
00:08:19.254 --> 00:08:25.988
迷ったときは、不足すると困るかどうかを基準に、切り上げかどうかを判断してみてください。
