168

私は浮動小数点数を持っています135.12345678910. その値を文字列に連結したいのですが、欲しいのは135.123456789. print を使用すると、次のようにして簡単にこれを行うことができます。

print "%.9f" % numvar

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

4

7 に答える 7

219

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 の回答をご覧ください。ただし、この方法は高速です。

于 2013-03-07T05:36:58.387 に答える
58

使用round

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
于 2013-03-07T05:33:41.720 に答える
12

実行時まで精度がわからない場合は、次の別の書式設定オプションが役立ちます。

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'
于 2015-08-17T07:04:56.657 に答える
8

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

newstring = "%.9f" % numvar
于 2013-03-07T05:19:29.423 に答える
-2

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

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")
于 2015-11-09T16:33:08.773 に答える