Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでセント単位の金額を通貨表記にフォーマットするプログラム

正の整数 n が与えられ、n は保有している金額を「セント」単位で表したものとします。このとき、人間が読みやすい通貨形式(3桁ごとのカンマ区切り+小数点以下2桁)に整形した文字列を求めるのが本記事のテーマです。

例えば、入力が n = 123456 の場合、出力は "1,234.56" となります。

解法のアルゴリズム

この問題は、数値を一度文字列に変換し、後ろから桁を区切りながらカンマを挿入していくことで解決できます。手順は以下の通りです。

  • n を文字列に変換して cents とする
  • cents の桁数が 2 未満の場合は、「0.0」+ cents を返す
  • cents の桁数がちょうど 2 の場合は、「0.」+ cents を返す
  • 下2桁を除いた部分を currency とし、残った下2桁の前に「.」を付けて小数部を作る
  • currency の桁数が 3 より大きい間、末尾3桁の前に「,」を付けながら先頭側へ挿入していく
  • 最後に currency と cents を連結した結果を返す

実装例

それでは、実際のPythonコードを見てみましょう。

class Solution:
    def solve(self, n):
        cents = str(n)
        if len(cents) < 2:
            return '0.0' + cents
        if len(cents) == 2:
            return '0.' + cents
        currency = cents[:-2]
        cents = '.' + cents[-2:]
        while len(currency) > 3:
            cents = ',' + currency[-3:] + cents
            currency = currency[:-3]
        cents = currency + cents
        return cents

ob = Solution()
print(ob.solve(523644))

入力

523644

出力

5,236.44

コードのポイント解説

この実装の鍵となるのは、Pythonのスライスです。cents[-2:] で末尾の2桁(小数部分)を取り出し、cents[:-2] でそれ以外の整数部分を取得しています。

その後の while ループでは、整数部分の末尾3桁を切り出してはカンマとともに結果の先頭に追加し、元の文字列からその3桁を削除する、という操作を繰り返します。これにより、3桁ごとにカンマが正しく挿入されていきます。

また、桁数が1桁や2桁の場合(例:5セント、50セント)も「0.05」「0.50」として正しく表示できるよう、事前にエッジケースを処理している点も重要です。

補足:標準機能を使った簡潔な書き方

実務では、Pythonの f 文字列(フォーマット済み文字列リテラル)を使えば、同じ処理をわずか1行で実現できます。

n = 523644
print(f"{n / 100:,.2f}")  # 出力: 5,236.44

:,.2f の書式指定により、3桁ごとのカンマ区切りと小数点以下2桁の固定表示が自動的に行われます。ただし、この方法は浮動小数点数を経由するため、非常に大きな金額や厳密な計算が必要な場面では、decimal モジュールの利用を検討するとよいでしょう。

  1. Pythonで行列の転置を求めるプログラム

    この記事では、与えられた問題に対する解法とアプローチについて詳しく解説します。 問題文 ある行列が与えられたとき、その転置を同じ行列に格納し、結果を表示する必要があります。 行列の転置とは、行を列に、列を行に入れ替えたものです。言い換えれば、行列Aの転置は、要素A[i][j]をA[j][i]と入れ替えることで得られます。 実装例 N = 4 def transpose(A): for i in range(N): for j in range(i+1, N): A[i][j], A[j][i] = A[j][i], A[i][j] # ドライ

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に