

こんにちは。質問失礼いたします。  
Double型をString型に変換した際に0.00のような「0」が続く数値の場合、  
「e-」のような浮動小数点表記になってしまいます。  
これを回避する方法をどなたかご存知ないでしょうか...

[code]

    import Foundation
    
    let a = 0.138274823423
    let b = 0.000021312312
    
    let at = String(a)
    let bt = String(b)
    
    print(at) // 0.138274823423
    print(bt) // 2.1312312e-05
    
[/code]

**NumberFormatter** が使えると思い、以下のようにしてみましたが解決しませんでした。

[code]

    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    
    let ans = formatter.string(from: NSNumber(value: b))
    
    print(ans!) // 0
    
[/code]


CC BY-SA 3.0
2017-11-11T08:55:25.757
39494
2017-11-12T01:21:39.707
19269
question
swift
Double型をString型に変換すると「e-」がついてしまう


すみません。自己解決です。>人<

[code]

    let b = 0.000021318312
    //ここで桁数を指定
    let ans = String(format: "%.8f", b)
    
    print(ans) // 0.00002132
    
[/code]

以下参考

> [文字列フォーマット Apple
> リファレンス](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html)


CC BY-SA 3.0
2017-11-11T10:03:16.423
39496
2017-11-11T10:03:16.423
19269
39494
answer


自己回答のように`String(format:)`も使えるでしょうが、`NumberFormatter`でも同様のことはできます。

[code]

    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    //ここで桁数を指定
    formatter.minimumFractionDigits = 8
    
    let ans = formatter.string(from: b as NSNumber)
    
    print(ans!) //-> 0.00002131
    
[/code]

`String(format:)`による変換は、ローカライズを考慮してくれないので、

  * ユーザに見せるための文字列ではない
  * 将来にわたって他国語対応の必要はない

と言う場合だけに使用を限られた方がいいでしょう。

Appleのクラスリファレンスは、まだまだ記述も少なく、コード例もほとんど見られないのでとても使いやすいとは言えないのですが、一応示しておきます。  
[NumberFormatter](https://developer.apple.com/documentation/foundation/numberformatter)  
[minimumFractionDigits](http://minimumFractionDigits)


CC BY-SA 3.0
2017-11-12T01:21:39.707
39508
2017-11-12T01:21:39.707
13972
39494
answer