数値オブジェクトについて

# 数値オブジェクトについて

- [目次]
	- [基本の使い方]
	- [数値クラス]
	- [数値メソッド]
		- [四則演算]
		- [分数]
		- [浮動小数点数]
	- [クラスの変更]
	- [クラス・メソッドの調べ方]
	- [まとめ]

<!-- /TOC -->
## 基本の使い方
普通に数字を記載してもらえれば大丈夫です。<br>

example<br>

入力

```rb
puts 3

puts 1.2
```
出力

```rb
3
1.2
```
## 数値クラス
<img width="579" alt="Numeric_class.png" src="https://qiita-image-store.s3.amazonaws.com/0/325126/cfe6c4f7-4404-4545-c8ff-61a805101701.png">

<br>

数値オブジェクトの大元となるクラスが**Numeric**です。<br>
そこから整数の値を扱う**Integer**、浮動小数点数を扱う**Float**に分かれます。<br>
Integerはさらに**Fixnum**と**Bignum**に分かれます。<br>
Bignumの方が大きな値を扱う事ができます。ただし、FixnumからBignumへのクラスの変換は自動で行われるので、クラスとして存在していることを知っておくだけで十分です。<br>

**注:Ruby 2.4 以降は Integer に一本化されました。**
## 数値メソッド
数値オブジェクトに関わる代表的なメソッドについて説明します。<br>
+や-などの四則演算もメソッドの一つです。
### 四則演算
<img width="389" alt="shisoku.png" src="https://qiita-image-store.s3.amazonaws.com/0/325126/449cb01a-f5f0-f8df-5473-55eb63cde581.png">

<br>

足し算と引き算は数学と同様に`+`、`-`を使用します。<br>
掛け算は`*`、割り算は`/`を使用します。 <br>
割り算の余りを表示したい場合は`%`を使います。<br>
べき乗を行うには`**`を使用します。<br>

example<br>

入力

```rb
puts 4+3 #足し算

puts 4-3 #引き算

puts 4*3 #掛け算

puts 4/3 #割り算

puts 4%3 #4/3の余り

puts 4**3 #4の3乗
```
出力

```rb
7
1
12
1
1
64
```

割り算で少数点以下も表示したい場合<br>
例えば、計算式の中で4の表記を4.0といった表記にして、小数点以下を表示しておけばOKです。

example<br>

入力

```rb
puts 4/3 #割り算

puts 4.0/3
```
出力

```rb
1
1.3333333333333333
```

### 分数
四則演算の中で分数にして表記することも可能です。<br>
その場合`Rational`を使用します。<br>
使い方は<br>
`Rational(分子,分母)`<br>
です。<br>

example

入力

```rb
puts Rational(4,5)

puts Rational(4,5)+Rational(4,5)
```
出力

```rb
4/5
8/5
```

Rationalにはもっと簡単な書き方もあります。<br>

example

入力

```rb
puts 4/5r

puts 4/5r+4/5r
```
出力

```rb
4/5
8/5
```
### 浮動小数点数
<img width="395" alt="syosu.png" src="https://qiita-image-store.s3.amazonaws.com/0/325126/8a0ce115-30f7-b710-e9e9-4ac9b4b5ac7d.png">


少数を扱うメソッドとして
- 四捨五入
- 小数点以下切り捨て
- 小数点以下切り上げ
があります。<br>

四捨五入を行いたい時は`round`を使用します。<br>

example<br>

入力

```rb
puts 1.5.round

puts 1.4.round
```
出力

```rb
2
1
```

小数点以下の切り捨てを行いたい時は`floor`を使用します。<br>

example<br>

入力

```rb
puts 1.5.floor

puts 1.4.floor
```
出力

```rb
1
1
```

小数点以下の切り上げを行いたい時はceilを使用します。<br>

example<br>

入力

```rb
puts 1.5.ceil

puts 1.4.ceil
```
出力

```rb
2
2
```
## クラスの変更
<img width="377" alt="change.png" src="https://qiita-image-store.s3.amazonaws.com/0/325126/cbf40029-6828-063a-79f0-f6ed85e9c1b8.png">


クラスの変更を行ってくれるメソッドについてです。<br>

例えば`4.0`を`4`に変更したいとします。<br>
これは`少数(Float)`を`整数(Integer)`に変更するということです。<br>
ですのでこの場合**I**ntegerに変更するという意味で、`to_i`というメソッドになります。<br>

<img width="579" alt="Numeric_class.png" src="https://qiita-image-store.s3.amazonaws.com/0/325126/06fa3d1c-3944-7739-053f-c56f497a4c3e.png">


example<br>

入力

```rb
puts 1.5.to_i

puts 1.4.to_i
```
出力

```rb
1
1
```
この場合、**小数点以下は切り捨て**になります。<br>

逆に、`整数(Integer)`を`少数(Float)`に変更する場合。<br>
**F**loatに変更するので、`to_f`を使用します。<br>

example<br>

入力

```rb
puts 1.to_f

puts 20.to_f
```
出力

```rb
1.0
20.0
```
## クラス・メソッドの調べ方

クラスを調べる場合は`class`を使用します。<br>

example<br>

入力

```rb
puts 2.class

puts 2.0.class
```
出力

```rb
Integer
Float
```

メソッドを調べる場合は`methods`を使用します。<br>

example<br>

入力

```rb
puts 2.methods
```
出力

```rb
-@
**
<=>
upto
<<
<=
>=
==
chr
===
>>
[]
%
&
inspect
+
ord
-
/
*
size
succ
<
>
to_int

以下略
```
## まとめ

<img width="692" alt="matome.png" src="https://qiita-image-store.s3.amazonaws.com/0/325126/589fc0a1-356b-67f7-d839-bb926660de51.png">