Pythonで10進値を切り捨てようとしています。四捨五入したくないのですが、指定した精度まで小数値を表示するだけです。私は以下を試しました:
_d = 0.989434
'{:.{prec}f}'.format(d, prec=2)
_
これにより、0.99に丸められます。しかし、実際には出力を0.98にしたいです。明らかに、round()
はオプションではありません。これを行う方法はありますか?または、コードに戻ってすべてをdecimal
に変更する必要がありますか?
ありがとう。
私はあなたのすべての要件を認識していませんが、これはかなり堅牢になります。
>> before_dec, after_dec = str(d).split('.')
>> float('.'.join((before_dec, after_dec[0:2])))
0.98
この答えは堅牢でも数学的にも正しくありません。 Decimal.quantize
メソッドを使用してこれを行う正しい方法については、 以下のNilani Algiriyageの回答 を参照してください。
次のコードを使用できます
import decimal
d = 0.989434
print decimal.Decimal(d).quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
d = 0.989434
print floor(d * 100) / 100
Math.floor(x)xのフロアをfloatとして返します。これは、x以下の最大の整数値です。
小数「。」の左側にある2つの小数を移動し、フローリングしてから、「。」の右側にある数字を戻します。
100はによって変更することができます
n = 2
m = pow (10, n)
d = 0.989434
print floor(d * m) / m
n
は必要な精度です。
EDIT: dが負の場合、ceilメソッドを使用する必要があります
if d < 0:
print ceil(d * m) / m
else:
print floor(d * m) / m
それをもっと長いものにフォーマットしてから、余分な数字を切り取ります。
def truncate(f, digits):
return ("{:.30f}".format(f))[:-30+digits]
これが私が信じる最良の方法です。
移動した桁数を左、右に移動します
d = 0.989434
print "{0:0.2f}".format(int(d * 100)/100.0)
出力
0.98
他のいくつかの回答とかなり似ていますが、インポートはありません
def truncate(x, d):
return int(x*(10.0**d))/(10.0**d)
>>>truncate(0.987654, 2)
0.98
import math
d = 0.989434
prec = 2
output = math.floor(d * (10 ** prec)) / (10 ** prec)
それでも文字列の代わりに10進変数が必要な場合
数学でも:
d = 0.989434
x = int(d * 100.0) / 100.0
print "{0:0.2f}".format(x)
この場合、以下のコードは0.98を出力しますが、d値が10以上にならないように注意する必要があります。そうすると、たとえば10.12ではなく10.1のみが出力されます。
d = 0.989434
print '{:.{prec}s}'.format(str(d), prec=4)
str
を使用:
d = str(0.989434)
print float(d[:d.find('.')+3])
表示するだけでよい場合は、文字列に変換してスライスすることができます。
d = 0.989434
print str(d)[0:4] #or print(str(d)[0:4])
このリンクで ここ 私は以下の解決策を投稿しました:
def truncate_number(f_number, n_decimals):
strFormNum = "{0:." + str(n_decimals+5) + "f}"
trunc_num = float(strFormNum.format(f_number)[:-5])
return(trunc_num)
# Testing the 'trunc_num()' function
test_num = 1150/252
[(idx, truncate_number(test_num, idx)) for idx in range(0, 20)]
少なくとも、モジュールをロードする必要はなく、新しい計算も必要ありません。これまでのところ、公債価格の計算における切り捨て要件に関する私の問題は解決しました。