2009-06-11 10 views

答えて

5

私はそこにあるとは思いませんこの形式の事前定義された形式はPythonで継承されており、C言語では目的の形式がないと確信しています。

今、Python 3では、形式特殊な機能。独自の書式設定が可能です。 Pythonでの最後のゼロを削除すると、非常に簡単です:ちょうどストリップメソッドを使用します。

a = 1.23040000 
print str(a).rstrip('0') 

あなたは小数点以下の0を維持したい場合は、それはどちらか非常に難しいことではありません。

+0

よかった!今は、1.000000 - > 1.0の状況を個別に処理するだけです。つまり、「。」の後にゼロだけがあるかどうかを確認するなどの簡単な方法です。 – zequzd

+4

私は簡単な答えに行くだろう:最後の文字がポイントであるかどうかを検出し、その場合は0を加える。これはローカライゼーションでは機能しません(たとえば母国語ではフランス語、小数点には '、区切り記号には'。 'を使用します)。 –

1

'%2.2f'オペレータは関係なく、番号が持っているどのように多くの有効桁の小数点以下の桁数が同じで行います。番号でこれを識別し、フォーマットを手作業で行う必要があります。小数点以下の桁数が多い文字列に印刷して末尾のゼロをすべて取り除くことで、これを短縮することができます。

の下に、これはサンプルで​​のように見えるかもしれません行うには些細な機能:実行すると、あなたはこの出力を得る

import re 

foo_string = '%.10f' % (1.33333) 
bar_string = '%.10f' % (1) 

print 'Raw Output' 
print foo_string 
print bar_string 

print 'Strip trailing zeros' 
print re.split ('0+$', foo_string)[0] 
print re.split ('0+$', bar_string)[0] 

print 'Intelligently strip trailing zeros' 
def intel_format (nn): 
    formatted = '%.10f' % (nn) 
    stripped = re.split('0+$', formatted) 
    if stripped[0][-1] == '.': 
     return stripped[0] + '0' 
    else: 
     return stripped[0] 

print intel_format (1.3333) 
print intel_format (1.0) 

Raw Output 
1.3333300000 
1.0000000000 
Strip trailing zeros 
1.33333 
1. 
Intelligently strip trailing zeros 
1.3333 
1.0 
+0

ありがとうございます!私はまた、これを行うにはfloat_variable%1 == 0ならテストしました。 – zequzd

9

小数点モジュールの使用はどうですか? documentationから

:1.30 + 1.20が2.50になるように

「decimalモジュールは、重要な場所の概念を取り入れ末尾のゼロは重要性を示すために保たれている。これは、金銭的な用途のために通常のプレゼンテーションでの乗算のために。。。 、「教科書」アプローチは、被乗数内のすべての数値を使用して例えば、1.3 * 1.2 1.56 1.20 * 1.30しばらく与える1.5600を与える

normalize()機能は後続ゼロを削除します。

>>> from decimal import * 
>>> d1 = Decimal("1.30") 
>>> d2 = Decimal("1.20") 
>>> d3 
Decimal("1.5600") 
>>> d3.normalize() 
Decimal("1.56") 
+0

はい、これも可能です。しかし、私が書かなければならなかったプログラムは、本質的に科学的な手段であったか、または意義とは何の関係もなかったが、それはやや些細な運動であったが、今は機能する。ありがとうございました! – zequzd

-2
def float_remove_zeros(input_val): 
    """ 
    Remove the last zeros after the decimal point: 
    * 34.020 -> 34.02 
    * 34.000 -> 34 
    * 0 -> 0 
    * 0.0 -> 0 
    """ 
    stripped = input_val 
    if input_val != 0: 
     stripped = str(input_val).rstrip('0').rstrip('.') 
    else: 
     stripped = 0 
    return stripped 
+0

-1:質問:フロートが104.06250000の場合、プログラムは104.0625 ... 119.00000または72.000000 ...を出力します。[be] 119.0と72.0。

4

私は最も単純な方法は "ラウンド"関数だと思う。あなたの場合:

>>> round(104.06250000,4) 
104.0625 
0

Python 2.6以上を使用している場合は、文字列メソッド形式を使用できます。

>>> print "{0}".format(1.0) 
1.0 
>>> print "{0}".format(1.01) 
1.01 
>>> print "{0}".format(float(1)) 
1.0 
>>> print "{0}".format(1.010000) 
1.01 
関連する問題