web-dev-qa-db-ja.com

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

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

print "%.9f" % numvar

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

122
pauliwago

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

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

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

ただし、3以上のPythonバージョン(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の回答をご覧ください。ただし、この方法はfastです。

149
HAL 9001

Python 3.6 | 2017年

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

例:

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

新しいf文字列についてもっと読む:

Enter image description here

42
Or Duan

roundを使う:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
38
shantanoo

書式設定をするのは印刷ではありません、それは文字列の特性なので、あなたはただ使うことができます

newstring = "%.9f" % numvar
7
John La Rooy

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

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

9桁の精度を設定するには、次のようにします。

print "%.9f" % numvar

2桁の精度で返す:

print "%.2f" % numvar 

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

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

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

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