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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

1209閲覧

python 四捨五入

marymills

総合スコア18

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/30 06:15

編集2020/01/30 06:16

python

1timelists = timelists = ["14:34:26.602","14:34:26.668","14:34:06.602","14:34:06.668"] 2 3

上記timelistsから秒で四捨五入してtime2listsを作りたい

python

1timelists = ["14:34:26.602","14:34:26.668","14:34:06.602","14:34:06.668"] 2time2lists = [] 3for time in timelists: 4 f = float(time[6:12]) 5 time2 = time[0:6] + str((round(f, 1))) 6 time2lists.append(time2) 7 8print(time2lists) 9

python

1time2lists =['14:34:26.6', '14:34:26.7', '14:34:6.6', '14:34:6.7']

希望の出力(06秒の時の0を追加したい)14:34:6.6ではなく14:34:06.6 14:34:6.7ではなく14:34:06.7 としたいということです

time2lists =["14:34:26.6", "14:34:26.7", "14:34:06.6", "14:34:06.7"]

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

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

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

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

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

guest

回答4

0

一応

python

1from datetime import datetime, time, timedelta 2fifty_mili_sec = timedelta(microseconds=50_000) 3 4timelists = ["14:34:26.602", "14:34:26.668", "14:34:06.602", "14:34:06.668", "23:59:59.999"] 5time2lists = [(datetime.strptime(t + '000', "%H:%M:%S.%f") + fifty_mili_sec).strftime("%H:%M:%S.%f")[:10] 6 for t in timelists]

結果

>>> time2lists ['14:34:26.6', '14:34:26.7', '14:34:06.6', '14:34:06.7', '00:00:00.0']

投稿2020/01/31 04:40

編集2020/01/31 04:42
quickquip

総合スコア11038

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

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

0

単にstr()せず、書式指定します。いろいろ方法はありますが、例えば、

Python

1 time2 = f"{time[0:6]}{round(f,1):04.1f}"

ただ、"14:34:59.999"は、"14:34:60.0"になるので、そもそもこの方針は駄目です。
秒から分、分から時への繰上りまで自分で対応するか、timeモジュールを使って、時刻データとして処理するか。

投稿2020/01/30 06:40

otn

総合スコア84499

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

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

marymills

2020/01/30 23:40

timeモジョール使えそうですね。勉強します
otn

2020/01/31 01:12

文字列をstrptimeでtime型に変換して time型データに、0.05秒を足して、切り捨てる方向で文字列化すれば良いと思います。
guest

0

ベストアンサー

23:59:59:999 に対応するため、手こずりました。
0.1秒単位の整数にしてから処理してみました。

python

1timelists = ["14:34:26.602", "14:34:06.602", "14:04:59.950", "23:59:59.999"] 2time2lists = [] 3for time in timelists: 4 h, m, s = time.split(':') 5 t = ((int(h) * 60) + int(m)) * 600 + (int(s.replace('.', '')) + 50) // 100 6 time2 = "%02d:%02d:%02d:%d" % ((t // 10 // 60 // 60) % 24, 7 (t // 10 // 60) % 60, 8 (t // 10) % 60, 9 t % 10) 10 time2lists.append(time2) 11 12print(time2lists)

実行結果

['14:34:26:6', '14:34:06:6', '14:05:00:0', '00:00:00:0']

投稿2020/01/30 06:38

編集2020/01/30 09:26
shiracamus

総合スコア5406

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

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

marymills

2020/01/30 23:37

ありがとうございました。完璧です。 自分では質問の0の対応しか考えておらず 自分なりに for time in timelists: print(time[6:12]) f = float(time[6:12]) time2 = time[0:6] + str((round(f, 1))) if len(time2) == 9: time3 = time2[0:6] + "0" + time2[6:9] time2lists.append(time3) まで調べながら進んでいましたが 23:59:59:999 まで考えが及びませんでした。
guest

0

time2 = time[0:6] + ("0" +str((round(f, 1))))[-4:]

とすることで、一度一番左にすべて0を加えた後に右から4文字を切り出すため、1桁の場合は0が付き、そうでない場合は0が消えます。

投稿2020/01/30 06:36

nerianighthawk

総合スコア544

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

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

marymills

2020/01/30 23:47

1桁の場合と2桁の場合の区別をして1桁の場合0を加えるとしか考えておらず 0を加えた後に右から4文字を切り出すのすれば1桁の場合と2桁の場合を気にせずできるということですね 勉強になりました。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問