🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1289閲覧

桁数区切りのカンマを挿入したい

ysda

総合スコア65

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/23 09:01

編集2019/10/25 00:38

前提・実現したいこと

iOS用の電卓アプリを作成しています。
数字を入力した際に桁数区切りのカンマを挿入したいのですが、どのようにすれば良いのか見当がついておりません。
ググってNmberFormatterを使用するということまでは理解できるのですが、実際にどのように使用すれば良いのか、またdecimal型の数値に対してどうカンマを挿入すれば良いのかわかっていない状態です。
桁数を区切るための方法に関して、ご教示幸いです。

現在のコード(不要な部分は削除しています)

import UIKit class ViewController: UIViewController{ var plusminus = false //±の切り替え var performingMath = false // var operation = 0 var secondNumber = String() //[previousNumber + "演算子"] var percentResult = NSDecimalNumber() //%格納用 var secondFormula = String() // var equalFlag = true //=ボタン押下後のラベル表示結果制御用 var equalFlag2 = true //=ボタンを連続で押しても何も計算がされないように制御 var decimalFlag = true //計算結果に対して「.」を押すと「0.」にするためのフラグ var percentFormulaFlag = true//trueの時は式ラベル=結果ラベル,falseの時は式ラベルは計算途中のものが現れる var operatorCheck = true //演算子2回連続押せないように制御 var operatorCheck2 = true var plusminusFormulaFlag = false //±の式ラベルを正常化させるため var leftNumber = NSDecimalNumber()//演算子の前の数字 var rightNumber = NSDecimalNumber()//入力した数字と計算結果 @IBOutlet weak var Result: UILabel! //入力した数字と計算結果表示用 @IBOutlet weak var formula: UILabel! //式を表示 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. Result.text = "0" } @IBAction func numbers(_ sender: UIButton) {//0~9までの文字 decimalFlag = true if performingMath == true { if operatorCheck2 == false{ Result.text = Result.text! + String(sender.tag-1) formula.text = formula.text! + String(sender.tag-1) }else{ Result.text = "0" if Result.text != "0"{ //計算結果に表示されている数字が0でなければ、直前の数字と入力した数字をつなげる if equalFlag == true{ Result.text = Result.text! + String(sender.tag-1) formula.text = String(secondNumber) + formula.text! + String(sender.tag-1) } else { //=ボタン押した後 Result.text = String(sender.tag-1) formula.text = String(sender.tag-1) equalFlag = true } } else { //計算結果に表示されている数字が0であれば、入力した数字に書き換える Result.text = String(sender.tag-1) formula.text = String(secondNumber) + String(sender.tag-1) } } print(Result.text!) performingMath = false operatorCheck2 = false } else { if Result.text != "0" { //計算結果に表示されている数字が0でなければ、直前の数字と入力した数字をつなげる if equalFlag == true{//=ボタンの前 Result.text = Result.text! + String(sender.tag-1) formula.text = formula.text! + String(sender.tag-1) } else{//=ボタンの後 if Result.text == "0."{ Result.text = Result.text! + String(sender.tag-1) formula.text = formula.text! + String(sender.tag-1) equalFlag = true }else{ Result.text = String(sender.tag-1) formula.text = String(sender.tag-1) equalFlag = true } } } else { //計算結果に表示されている数字が0であれば、入力した数字に書き換える Result.text = String(sender.tag-1) formula.text = String(sender.tag-1) } } } @IBAction func calculateButton(_ sender: UIButton) { //演算子の入力 //演算子押す前の数字をpreviousNumberに代入 if operatorCheck2 == false{ }else{ if performingMath == false { if operatorCheck == true{ leftNumber = NSDecimalNumber(string: Result.text) operatorCheck = false if sender.tag == 14 { //÷を押した時 Result.text = "÷" //上のラベルに表示 formula.text = leftNumber.stringValue + "÷" //式のラベルに表示 } if sender.tag == 15 { //×を押した時 Result.text = "×" formula.text = leftNumber.stringValue + "×" } if sender.tag == 16 { //-を押した時 Result.text = "-" formula.text = leftNumber.stringValue + "-" } if sender.tag == 17 { //+を押した時 Result.text = "+" formula.text = leftNumber.stringValue + "+" } }else{ if operatorCheck2 == false{ }else{ Result.text = "" formula.text = "" } } } operation = sender.tag performingMath = true plusminus = false //±の切り替え。次押した時にはマイナスになる percentFormulaFlag = false secondNumber = formula.text! //変数secondNumberに[previousNumber + "演算子"]を代入 equalFlag = true equalFlag2 = true plusminusFormulaFlag = true } } @IBAction func anserButton(_ sender: UIButton) { //=ボタンを押した時 if equalFlag2 == false{ Result.text = Result.text! + "" formula.text = formula.text! + "" }else{ if Result.text == "+"||Result.text == "-"||Result.text == "÷"||Result.text == "×"{ Result.text = Result.text! + "" formula.text = formula.text! + "" } else{ rightNumber = NSDecimalNumber(string: Result.text!)//上のラベルに表示してある数字をDouble型でnumberOnScreenに代入 if operation == 14 { //割り算 Result.text = leftNumber.dividing(by: rightNumber).stringValue//decimalをstringに変換 formula.text = leftNumber.stringValue + "÷" + rightNumber.stringValue + "=" + Result.text! } if operation == 15 { //掛け算 Result.text = leftNumber.multiplying(by: rightNumber).stringValue formula.text = leftNumber.stringValue + "×" + rightNumber.stringValue + "=" + Result.text! } if operation == 16 { //引き算 Result.text = leftNumber.subtracting(rightNumber).stringValue formula.text = leftNumber.stringValue + "-" + rightNumber.stringValue + "=" + Result.text! } if operation == 17 { //足し算 Result.text = leftNumber.adding(rightNumber).stringValue formula.text = leftNumber.stringValue + "+" + rightNumber.stringValue + "=" + Result.text! } } } plusminus = false //±の切り替え。次押した時にはマイナスになる equalFlag = false equalFlag2 = false performingMath = false percentFormulaFlag = true operatorCheck = true decimalFlag = false plusminusFormulaFlag = false operatorCheck2 = true operation = 0 } }

###追記
ログ上で桁数区切りを行うことはできたのですが、結果表示用のラベルにその数値を代入するとうまく表示させることができない状態になっております。
こちらに新しく質問を載せました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「NumberFormatter decimal」でGoogle検索するとたくさんヒットしますよ。

Swift

1let numberFormatter = NumberFormatter() 2numberFormatter.numberStyle = .decimal 3numberFormatter.maximumFractionDigits = 3 4 5let formattedNumbers = 6 [11307.3, 1025.64, 1.27826, 1676.46, 0.584175, 183.792, 1.02237, 13.649, 0.472665, 127.604] 7 .flatMap { number in 8 return numberFormatter.string(from: number) 9 } 10print(formattedNumbers)

投稿2019/10/24 16:19

nakasho_dev

総合スコア2655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ysda

2019/10/25 00:40

ご回答誠にありがとうございます。 実はログ上で桁数区切りを行うことはできたのですが、それをうまく表示させることができない状態になっております。 質問の追記欄に新しい質問のリンクを貼りました。もしよろしければこちらの質問に対してもご回答いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問