浮動小数点数を特定の精度に変換してから文字列にコピーする


144

浮動小数点数があります135.12345678910。その値を文字列に連結したいのですが、必要なのはだけです135.123456789。印刷では、次のようにすることで簡単にこれを行うことができます。

print "%.9f" % numvar

numvar私の元の数です。これを行う簡単な方法はありますか?


3
%はまさにそれを行います-%はprint関数の一部ではなく文字列の一部です
-Pythonの

回答:


177

Python <3(例2.6 [コメントを参照]または2.7)では、2つの方法があります。

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

ただし、Pythonのバージョンが3を超える場合(例:3.2または3.3)、オプション2が推奨されます。

オプション2の詳細については、Pythonドキュメントの文字列フォーマットに関するこのリンクをお勧めします

オプション1の詳細についてはこのリンクで十分であり、さまざまなフラグに関する情報があります。

Python 3.6(2016年12月に正式にリリース)は、f文字列リテラルを追加しました。ここ詳細を参照してください。これにより、str.formatメソッドが拡張されます(f"{numvar:.9f}"元の問題を解決する中括弧の使用)。つまり、

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

問題を解決します。詳しくは@ Or-Duanの回答をご覧ください。ただし、この方法は高速です。


1
オプション2はnewer_method_string = "{:.9f}".format(numvar)- :フィールドとフォーマットを区切るために必要なことに注意してください。とにかくこれを2.7.5でテストしました。
Caltor 2013年

1
Python 2.6の場合、オプション2はnewer_method_string = "{0:.9f}".format(numvar)-この古いバージョンのfield_nameに必要な0であることに注意してください。
ttq

56

Python 3.6

明確にするために、f-stringフォーマットを使用できます。これはformatメソッドとほぼ同じ構文を持っていますが、少しわかりやすくしています。

例:

print(f'{numvar:.9f}')

新しいf文字列の詳細:

以下は、さまざまなテスト済みメソッド(上記の最後のリンクから)の実行時間の図です。

実行時間



8

書式設定を行うのは印刷ではなく、文字列のプロパティなので、次のように使用できます

newstring = "%.9f" % numvar

または、新しいスタイルのフォーマットを使用します。valueString = "{:. 9f}"。format(number)
Zaren

8

実行時まで精度がわからない場合は、この他のフォーマットオプションが役立ちます。

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

3
.format-method を使用したい場合は、次のように引数をネストすることによっても実行できることに注意してください'{:.{n}f}'.format(numvar,n=n)
nivk 2018年

2

9桁の精度を設定するには、以下を取得します。

print "%.9f" % numvar

2桁の精度を返します。

print "%.2f" % numvar 

2桁の精度とfloat変換値を返します。

numvar = 4.2345
print float("%.2f" % numvar) 

-2

str機能はバグがあります。以下をお試しください。「0,196553」が表示されますが、正しい出力は「0,196554」です。そのためstr、関数のデフォルト値はROUND_HALF_UPです。

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")

2
.対は何,ですか?そして、それはパウリワゴの質問にどのように関連していますか?
Peter Mortensen、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.