質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
Swift

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

Q&A

解決済

2回答

547閲覧

DoubleからStringへの変換

sleep_zz

総合スコア7

Swift

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

0グッド

1クリップ

投稿2018/03/29 06:55

行いたいこと

Double型を使用して計算し、String型で表示したいです。

発生している問題・エラーメッセージ

小さい数字なら大丈夫なんですが、大きい数字の計算になると結果に文字が入ってしまいます。
Intにすれば多分大丈夫だと思うんですが、
割り算や、小数点の計算も行いたいのでどうすればいいかわかりません。

該当のソースコード

Swift

1var value1:Double = 66666666666666666 2let value2:Double = 999999999999999999 3value1 += value2 4print(String(value1)) 5//1.06666666666667e+18

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

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

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

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

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

guest

回答2

0

e+というのは指数表記です。
数値として扱われますので、そのまま計算に使っても大丈夫です。

swift

1let value = 12345e+3 2print(value, type(of: value)) 3//=> 12345000.0 Double

【追記】

大きな値を正しく計算/表示したいのであれば、NSDecimalNumberを使いましょう。

swift

1var value1 = NSDecimalNumber(string: "66666666666666666") 2let value2 = NSDecimalNumber(string: "999999999999999999") 3value1 = value1.adding(value2) 4print(value1.stringValue) 5//=> 1066666666666666665

投稿2018/03/29 07:13

編集2018/03/29 08:20
fuzzball

総合スコア16731

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

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

sleep_zz

2018/03/29 08:06

回答ありがとうございます! e+は指数表記なんですね。 勉強になりました。
sleep_zz

2018/03/29 08:29

追記ありがとうございます! NSDecimalNumberを使うと、末尾の0が消えるんですね。 知りませんでした。 使って見たいと思います!
guest

0

ベストアンサー

文字列に直す時に指数表記を避けたいのであれば、formatを使ってみてください

swift

1import Foundation 2 3print(String(format: "%f", value1)) 4// => 1066666666666666624.000000

投稿2018/03/29 07:21

kakajika

総合スコア3131

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

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

sleep_zz

2018/03/29 08:06

回答ありがとうございます! 実際にやってみて解決しました。 指数表記を無くしたかったので方法を教えていただき感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問