【Kotlin】小数点の切り上げ/切り捨て/四捨五入方法!第2位などの桁数

この記事からわかること

  • Android Studio/Kotlin浮動小数点数型の値を切り上げ/切り捨て/四捨五入する方法
  • ceil/floor/round関数の使い方
  • 小数点第2位や3位など任意の桁数丸め処理
  • 文字列型変換して小数点の表示桁数調整する方法
  • formatメソッドの使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Kotlinで浮動小数点数型の値を切り上げ/切り捨て/四捨五入する方法をまとめていきたいと思います。

Kotlinで浮動小数点数を扱うデータ型の違い

Kotlinでは数値(浮動小数点数)を扱うデータ型は複数存在します。

Swiftの浮動小数点数データ型

型名 概要
Int 整数型 23
Float 32ビット浮動小数点数型(小数点7桁まで) 3.1415927
Double 64ビット浮動小数点数型(小数点15桁まで) 3.141592653589793

数値を扱うという点では同じですが、データ型が異なるので許容していない範囲の数値を格納するとエラーになってしまいます。浮動小数点数型に関しては許容外の桁数を渡されると自動で収まる桁数に丸められます。またFloat型を指定する場合は末尾にfを付与します。

var numI: Int = 3.141592653589793238462643    // エラー
var numF: Float = 3.141592653589793238462643f // 許容できる範囲に自動で丸められる
var numD: Double = 3.141592653589793238462643 // 許容できる範囲に自動で丸められる

println(numI) // The floating-point literal does not conform to the expected type Int
println(numF) // 3.1415927
println(numD) // 3.141592653589793

FloatとDoubleの違い

同じ浮動小数点数型であるFloatDoubleの違いは許容できる桁数の違いです。変数初期格納時に許容外の桁数を渡しても問題はありませんが異なるデータ型を受け入れられるわけではありません

var numF: Float = 3.141592653589793238462643f
var numD: Double = 3.141592653589793238462643

numD = numF // エラー
// Type mismatch: inferred type is Float but Double was expected

浮動小数点数型の値を丸め処理する関数

Kotlinでは浮動小数点数型の値に対して小数点以下を丸めることができる関数が用意されています。

import kotlin.math.ceil
import kotlin.math.floor
import kotlin.math.round
  
val num: Double = 5.6
val ceilNum = ceil(num)    // 6.0
val floorNum = floor(num)  // 5.0
val roundNum = round(num)  // 6.0

小数点第2位や3位など任意の桁数で丸め処理

Kotlinで用意されている関数は小数点の位の丸め位置を指定することはできません。例えば小数点第2位で四捨五入をしたい時は「10倍してから丸めて10で割る(桁をずらす)」ことで桁解決できます。

val num: Double = 3.141592653589793238462643
val numCeil = ceil(num * 10) / 10        // 3.2
val numFloor = floor(num * 100) / 100    // 3.14
val numRound = round(num * 1000) / 1000   // 3.142

小数点の位置をずらすことで任意の桁数で丸め処理を行うことができます。またそれにより表示させたい小数点以下の桁数をコントロールすることもできます。

文字列型に変換して小数点の表示桁数を調整

小数点以下の桁数の表示数を調整する際に便利なのがformatメソッドです。表示させたい桁数の形式から呼び出し、引数に対象の値を渡します。

val num: Double = 3.141592653589793238462643
println("%.1f".format(num))  // 3.1
println("%.3f".format(num))  // 3.142
println("%.5f".format(num))  // 3.14159

表示させたい小数点の桁数の形式」はフォーマット指定子と呼ばれる形式を指定します。その中で浮動小数点数型を指定する際は%.nf(nに桁数)で指定します。

数値の0埋め

ちなみにString(format:)イニシャライザで%0ndを使うと数値の0埋めをすることもできます。指定した桁数に足りていない桁に0を入れてくれます。

val num: Int = 1
println("%02d".format(num))  // 01
println("%03d".format(num))  // 001
println("%05d".format(num))  // 00001

割り算で小数点にならず0になる

Kotlinで数値の割り算をしていた際になぜか結果が0になってしまう現象が起きました。

var five = 5
var ten = 10

println(five/ten) // 0

この原因はInt型であることでした。計算対象のfivetenは型推論によりInt型が割り当てられており、Int同士の計算だったので結果が小数点になってもサポート外になっていたようです。なので明示的にDoubleを指定することで解決しました。

var five: Double = 5.0
var ten: Double = 10.0

print(five/ten) // 0.5

Swiftでの小数点の取り扱いはこちら

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index