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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1439閲覧

python 3 において、小数の文字列表示でゼロパディングを行う方法の調べ方について

GuielNo4

総合スコア88

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/04/06 02:36

###前提・実現したいこと
小数を文字列で表示させる際、ゼロパディングがうまくいきません。
この言語は仕様がコロコロ変わるのか、手段が複数用意されているのか…
ググると情報があるのですが、期待通りの表示になりません。

正解のコードを教えていただきたいのはやまやまなのですが、
そもそも「正解にたどり着くまでの調べ方」が間違えているのでは?と考え、
http://docs.python.jp/3/index.html
公式ドキュメントの何処に書かれているか調べていましたが、
やはり今の自分の技量では見つからず、時間だけが浪費していくので、質問することにしました。

「ここに記されている」が一番いいのですが、
「ここ」と「ここ」と「ここ」に書かれていることから「類推」しないとわからない仕様のドキュメントなのか…

ゼロパディングの方法は公式ドキュメントのどこに記されているか、アドバイス頂けると助かります。

###発生している問題
import time
import datetime
now = datetime.datetime.now()
t1 = datetime.datetime.now()
time.sleep(5)
t2 = datetime.datetime.now()
diff = t2 - t1
print("{0:8.6f}".format(diff.microseconds)) ----- (1)
print("{0:08.6f}".format(diff.microseconds)) ---- (2)

(1) の表示 912.000000
(2) の表示 912.000000

させたい表示 → 0000912.000000

宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

{0:013.6f}13部分は、小数点も含めた桁幅を指定します。

Python

1print("{0:013.6f}".format(912.0)) # 000912.000000

■探し方

  • python formatなどで検索すると、以下が見つかるが、よく読まないと分からない。

6.1.3. 書式指定文字列の文法
grammar-token-width

  • formatの書式はC言語のprintfと同じ推測してprintf 書式 double 桁などと検索すると

フォーマット指定子一覧
第5章 標準入出力関数(1)
などでC言語での実サンプルが見つかる。

  • pythonでやってみる。
  • 意図通りになる。

投稿2017/04/06 02:54

編集2017/04/06 02:59
can110

総合スコア38266

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

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

GuielNo4

2017/04/06 04:28

詳細な情報ありがとうございました。とても助かります。 まずは構文解釈が先で、「string.Formatter.format」に辿り着く必要があったのかと理解致しました。 ここを手掛かりにドキュメントを読み進めてみることに致します。 アドバイスありがとうございました。
guest

0

こんな感じでしょうか?

Python3

1d = 912. 2print("{:014.6f}".format(d))

'.' の前の数字は少数を含めた全体の長さのミニマム値となりますので、整数部を7桁分確保したい場合は 14を指定する必要があります。

一応、仕様はこちらです
https://www.python.org/dev/peps/pep-3101/

Python 2.6にて追加された仕様ですので**「仕様がコロコロ変わる」**ってことは無いと思いますよ

ちなみに、datetime.datetime.microseconds は <int型>なのですが、何故少数表示なのでしょう?

https://docs.python.jp/3/library/datetime.html#datetime-objects

投稿2017/04/06 03:06

編集2017/04/06 03:17
magichan

総合スコア15898

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

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

GuielNo4

2017/04/06 04:52

情報ありがとうございます。 仕様変更の件ですが、ググったページのサンプルコードを動作させてもエラーだったり、 期待通りの表示にならず、「なんか推測しにくいなぁ」という思いから、 仕様がいろいろ変更になってるのかなと思い質問を書きました。 よくよく調べてみると、2 と 3 で print がこんなに変わっていたのですね… 考えが至らず、恥ずかしい質問になってしまいました… 小数の件は、ごもっともです。 今後、割り算でどの程度丸められてしまうのか調べるつもりで、 その意識のまま f にしてしまいました。 これも質問に用いるにはあまり良くないコードだったと反省しております。 アドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問