読み込み中...

Swiftで学ぶ!有効数字の取り扱い7選

Swiftのロゴと有効数字のイメージ図が一緒にデザインされているイラスト Swift
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Swiftを学ぶ上で、数値を扱う際に避けては通れない「有効数字」。

この記事を読むことで、Swiftでの有効数字の正しい取り扱いを習得できます。

特に、プログラム上での数値の精度や、数値計算の結果の正確さを保つための方法を中心に解説していきます。

●Swiftと有効数字の基本

SwiftはAppleが開発したプログラミング言語であり、iOSやmacOSなどのApple製品のアプリケーション開発に使用されます。

その特性上、グラフィック処理やデータの取り扱い、計算処理など多岐にわたる領域での数値の取り扱いが求められます。

○Swift言語の簡単な紹介

Swiftは、読みやすく、実行速度も速いと評価されている言語です。

Objective-Cからの移行も容易で、CやC++との併用も可能です。

また、型安全を重視しており、意図しない型の代入などのミスを防ぐ仕組みが取り入れられています。

これにより、数値計算時にも安全にデータを扱うことが可能となっています。

○有効数字とは何か

有効数字とは、ある数値の中で意味を持つ数字のことを指します。

例えば、203.45という数値では、全ての数字が有効数字となります。

一方、005.6700では「5.67」の部分のみが有効数字となります。

これは、計測時の誤差や精度の範囲内で意味を持つ数字だけを対象とするためです。

プログラミングにおける数値計算では、この有効数字を意識することで、精度の高い計算を実現することができます。

特に、Swiftでは数値の型(Int、Double、Floatなど)によって、取り扱える有効数字の範囲や精度が異なるため、適切な型を選択することが重要です。

●Swiftでの有効数字の使い方

Swiftで数値を扱う場面では、計算の精度や表示する際の桁数を指定することがよくあります。

これに関連して、有効数字を適切に扱うことは非常に重要です。

では、具体的にSwiftでどのように有効数字を扱うのか、サンプルコードを交えながら解説していきます。

○サンプルコード1:有効数字の基本的な取り扱い

まずは、Swiftでの基本的な有効数字の取り扱いを見ていきましょう。

下記のコードは、Double型の数値を持つ変数を宣言し、その数値を指定した桁数で四捨五入して表示するしています。

let number: Double = 123.45678
let roundedNumber = round(number * 100) / 100
print(roundedNumber)

このコードではnumberを使って123.45678という数値を持つ変数を宣言しています。

次に、round関数を使用してこの数値を小数点第二位まで四捨五入しています。

この例では、123.45678123.46と表示されることを期待します。

実際にこのコードを実行すると、123.46という結果が得られます。

このようにSwiftでは、数値の四捨五入を行う際に、round関数と掛け算・割り算の組み合わせを使うことで、指定した桁数での四捨五入が可能です。

○サンプルコード2:四捨五入の方法

Swiftでの四捨五入の方法をもう少し掘り下げてみましょう。

下記のコードは、様々な数値を小数点第一位、第二位、第三位で四捨五入する例を表しています。

let value1: Double = 5.678
let value2: Double = 123.456
let value3: Double = 0.1234

let roundedValue1 = round(value1)
let roundedValue2 = round(value2 * 10) / 10
let roundedValue3 = round(value3 * 100) / 100

print(roundedValue1)  // 6.0
print(roundedValue2)  // 123.5
print(roundedValue3)  // 0.12

このコードでは3つの異なる数値について、それぞれ小数点以下の桁数を四捨五入しています。

実際にコードを実行すると、value16.0value2123.5value30.12と表示されることが期待されます。

この方法を使うことで、Swiftでの数値を指定した桁数で簡単に四捨五入することができます。

○サンプルコード3:特定の桁数までの表示

数値の表示時に、特定の桁数までを表示することがしばしば要求されます。

例えば、科学的な計算の結果を表示する際や、ユーザーに対する金額の表示など、有効数字の桁数を制限したい場合が考えられます。

Swiftでは、Stringのフォーマットを利用して、特定の桁数までの数値を表示することができます。

次のコードは、Double型の数値を持つ変数の値を小数点第二位まで表示しています。

let number3: Double = 123.45678
let formattedNumber = String(format: "%.2f", number3)
print(formattedNumber)  // コメント:123.46と表示される

このコードでは、String(format:)メソッドを使って、数値を小数点以下二桁までの文字列にフォーマットしています。

%.2fの部分が、小数点以下二桁までを指定するフォーマットです。

実際に上のコードを実行すると、123.45678という数値が、123.46として表示されます。

このように、SwiftではString(format:)メソッドを使うことで、数値を指定した桁数までの文字列に変換することができます。

○サンプルコード4:数値の比較と有効数字の考慮

有効数字を正確に考慮することは、数値の比較を行う際にも非常に重要です。

例えば、計算結果が極めて近い数値である場合、その差が有効数字の範囲内であるかどうかを判定することは、多くのアプリケーションで必要とされます。

下記のサンプルコードは、2つの数値が指定した有効数字内で一致しているかを判定する方法を表しています。

let numA: Double = 123.456
let numB: Double = 123.457
let tolerance: Double = 0.01

if abs(numA - numB) < tolerance {
    print("2つの数値は有効数字内で一致しています。")
} else {
    print("2つの数値は有効数字の範囲外で異なります。")
}

このコードでは、abs関数を使用して2つの数値の差の絶対値を計算し、それが許容範囲toleranceより小さいかどうかで、数値が有効数字内で一致しているかを判定しています。

上記の例では、numAnumBの差は0.001となり、これは設定した許容範囲0.01よりも小さいため、出力される結果は2つの数値は有効数字内で一致しています。となります。

●Swiftでの有効数字の応用例

有効数字は、計算の精度や表示の際の制約を管理するための重要な概念です。

Swiftを使用して、有効数字を取り扱う際のさまざまな応用例を紹介します。

○サンプルコード5:有効数字を利用した計算関数

数学や科学計算では、有効数字を考慮して計算を行うことが多々あります。

Swiftでこのような計算を効率的に実装する方法を見てみましょう。

func multiplyWithSignificantFigures(_ num1: Double, _ num2: Double, significantFigures: Int) -> String {
    let result = num1 * num2
    let format = "%.\(significantFigures)f"
    return String(format: format, result)
}

let value1 = 123.45
let value2 = 67.89
let calculatedResult = multiplyWithSignificantFigures(value1, value2, significantFigures: 4)
print(calculatedResult)  // 8378.2605と出力される

このコードでは、2つの数値を乗算して、指定した有効数字までの結果を文字列として返す関数を定義しています。

実際にこの関数を利用すると、計算結果が指定の有効数字までの桁数で出力されます。

○サンプルコード6:配列やリストでの有効数字の取り扱い

複数の数値データを管理する際、配列やリストを使うことがよくあります。

このような場合、各要素の有効数字を一括で処理する方法を考えることが重要です。

let numbers: [Double] = [123.456789, 45.678912, 12.345678]
let formattedNumbers = numbers.map { String(format: "%.3f", $0) }
print(formattedNumbers)  // ["123.457", "45.679", "12.346"]と出力される

上のコードは、配列内の各数値を小数点以下三桁までの文字列に変換する例です。

map関数を使用して、配列内の各要素を変換しています。

○サンプルコード7:有効数字を考慮したグラフ表示

データの可視化やグラフの作成には、数値の精度が重要です。

Swiftでグラフを描画する際に、有効数字を考慮してデータを処理する方法を紹介します。

想像してみてください。

グラフのX軸やY軸のラベルを表示する際、特定の桁数までの数値を表示することが求められる場面が考えられます。

このような場合、次のようなコードを考えることができます。

let graphData: [Double] = [1234.5678, 4567.8912, 123.4567]
let formattedGraphData = graphData.map { round($0 * 100) / 100 }
print(formattedGraphData)  // [1234.57, 4567.89, 123.46]と出力される

上記のコードでは、グラフに表示するデータを小数点以下二桁までの数値に丸めています。

このように、Swiftを使用して有効数字を考慮したデータ処理を行うことで、正確かつ視覚的にわかりやすいグラフの表示を実現することができます。

●有効数字の取り扱いにおける注意点と対処法

有効数字の取り扱いにおいては、計算の正確さやデータの信頼性を確保するためにいくつかの注意点があります。

これらの注意点を理解し、適切に対処することで、Swiftでの計算やデータ表示の精度を向上させることができます。

○計算過程での有効数字の喪失

計算を行う際、四則演算やその他の演算によって有効数字が喪失される可能性があります。

let num1: Double = 123.45
let num2: Double = 0.0067
let result = num1 * num2
print(result)  // 0.826815と出力されるが、有効数字は4桁のはず

上記のコードでは、num1num2を乗算した結果、0.826815と出力されますが、元の数値から考えると、有効数字は4桁のはずです。

このような場合、計算結果の有効数字が増えてしまい、意図しない結果となることが考えられます。

対処法:計算後の結果を四捨五入または切り捨てて、正確な有効数字に調整する。

let adjustedResult = round(result * 1000) / 1000
print(adjustedResult)  // 0.827と出力され、有効数字4桁を保持

○0の取り扱い

数値の前後に存在する0は、有効数字としてカウントされない場合が多いです。

例:0.00123の有効数字は「123」の3桁

対処法:0を考慮しないで計算を進め、最終的に表示や出力を行う際に適切な桁数を持つように調整する。

○浮動小数点の誤差

コンピュータにおける浮動小数点の取り扱いは、誤差を生じる可能性があります。

特に小数点以下の計算や、非常に大きな数値と小さな数値の計算時には注意が必要です。

例: 10.0 / 3.0の結果は、実際には3.3333333333333335となり、末尾に微小な誤差が生じる。

対処法:計算結果を適切な桁数で四捨五入または切り捨てることで、誤差を最小限に抑える。

let divisionResult = 10.0 / 3.0
let roundedResult = round(divisionResult * 100) / 100
print(roundedResult)  // 3.33と出力される

●Swiftでの有効数字のカスタマイズ方法

Swiftでのプログラミングでは、様々な数値計算やデータの取り扱いを行いますが、その中で有効数字の取り扱いが重要となることも少なくありません。

そこで、Swiftで有効数字をカスタマイズする方法を詳しく解説します。

○Stringフォーマットを使用した表示方法のカスタマイズ

SwiftのStringフォーマットを使用することで、有効数字の桁数や表示形式を自由にカスタマイズできます。

let number: Double = 123.456789
let formattedString = String(format: "%.3f", number)
print(formattedString)  // 123.457と出力

このコードでは、numberという変数に格納された数値を小数点以下3桁までの有効数字として表示しています。

%.3fというフォーマット指定子を使用することで、小数点以下の桁数を制御しています。

○NumberFormatterを使用した詳細なカスタマイズ

NumberFormatterは、数字の表示形式を豊富にカスタマイズできる機能を持っています。

これを使うことで、より詳細な有効数字の取り扱いや表示形式のカスタマイズが可能です。

let number: Double = 1234.56789
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
let result = formatter.string(from: NSNumber(value: number))
print(result!)  // 1,234.57と出力

このコードを実行すると、numberの数値を3桁区切りのカンマ形式で、小数点以下2桁までの有効数字として表示します。

○計算処理のカスタマイズ

実際の計算処理時に、有効数字を考慮して計算結果をカスタマイズする方法もあります。

例えば、特定の桁数での四捨五入や切り捨てなど、計算結果を調整する方法を取り入れることができます。

let number: Double = 123.456
let roundedNumber = round(number * 10) / 10
print(roundedNumber)  // 123.5と出力

このサンプルコードでは、numberを小数点以下1桁で四捨五入する方法を表しています。

まとめ

Swiftを使用して有効数字を扱う際、基本的な取り扱いから応用例、さらに注意点やカスタマイズ方法に至るまでの多岐にわたるテクニックや知識が存在します。

初心者から経験者まで、Swiftの数値計算やデータ表示に関する深い理解を持つことで、より高品質なコードの作成や効率的なプログラミングが可能となります。

今回紹介したサンプルコードを活用し、実際の開発環境やプロジェクトに応じて有効数字の取り扱いを最適化してください。

数値の精度や表示形式のカスタマイズは、ユーザーエクスペリエンスの向上や計算結果の信頼性を高めるために非常に重要です。

最後に、Swiftでのプログラミングは常に進化しています。

有効数字の取り扱いをはじめとした各種のテクニックや知識を日々アップデートし、最新の方法やベストプラクティスを取り入れることで、より高度なSwiftプログラミングを追求してください。