質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

Pythonで小数点以下第3位まで表示して、それ以下は切り捨てて表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0グッド

0クリップ

26955閲覧

投稿2016/06/03 04:40

編集2016/06/15 06:21

Pythonで以下のコードがあります。

print ("%.3f" % value)

これを小数点以下第3位まで表示させて、かつそれ以下は切り捨てで表示させる書き方がございましたらお願いいたします。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答3

1

ベストアンサー

decimal を使ってください。

python

1import decimal 2 3v = 1.888888888 4print('{:.3f}'.format(v)) # -> 1.889 5print('{}'.format(round(v, 3))) # -> 1.889 6 7with decimal.localcontext() as ctx: 8 ctx.rounding = decimal.ROUND_FLOOR # -∞方向に丸める ≒ 切り捨て 9 v = round(decimal.Decimal(v), 3) # 3桁, FLOORモードで丸め 10print('{}'.format(v)) # -> 1.888

--- 追記
改めた点はlocalcontext()/round()を使わず、quantize()メソッドにしたこと。それと負の場合に切り捨てにならないので、ROUND_DOWNに変更しています。動作確認はPython3.5.1とPython2.7.11。

python

1from decimal import (Decimal, ROUND_DOWN) 2 3def round_down3(value): 4 value = Decimal(value).quantize(Decimal('0.001'), rounding=ROUND_DOWN) 5 return str(value) 6 7print(round_down3(188888.8888888)) 8print(round_down3(1.8888899999)) 9print(round_down3(0.9999999999)) 10print(round_down3(-1.9999999999)) 11 12# 出力 13# 188888.888 14# 1.888 15# 0.999 16# -1.999

投稿2016/06/03 06:18

編集2016/06/06 08:53
sharow

総合スコア1145

sounisi5011👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

2016/06/03 23:02 編集

これを関数の中で戻り値として出したいんですが、Attribute Errorがでます。 def xxx(): maxsumdata = max(datapoints,key=lambda x:x['Timestamp']) sumvalue = maxsumdata['Sum'] consumedvalue = sumvalue / 60 with decimal.localcontext as ctx: ctx.rounding = decimal.ROUND_FLOOR counsumedfloor = round(decimal.Decimal(consumedvalue),3) return ('{}'.format(counsumedfloor)) if __name__ == '__main__': print(xxx())
退会済みユーザー

退会済みユーザー

2016/06/03 13:57

AttributeError: 'function' object has no attribute '__exit__'のエラーが出てしまいます。
sharow

2016/06/03 14:41

with decimal.localcontext as ctx: --> with decimal.localcontext() as ctx:
退会済みユーザー

退会済みユーザー

2016/06/03 15:21

タイポしてました。今度はCannot convert float to Decimal. First convert the float to a stringのエラーが出て型変換をして試したましたが、うまくいきません。consumedvaluie = float(sumvalue) / 60も試しました。
退会済みユーザー

退会済みユーザー

2016/06/03 15:43 編集

型変換は解決しましたが、global name 'counsumedfloor' is not definedのエラーが出てはまってしまってます。値をとってくる場合で難しいんでしょうか。
sharow

2016/06/03 15:38

" First convert the float to a string"、「最初にfloatからstringに変換してください」と言っています。かなり古いPythonを使っておられるようです。 round(decimal.Decimal(str(consumedvalue)), 3) か round(decimal.Decimal.from_float(consumedvalue), 3) を試してみてください。
退会済みユーザー

退会済みユーザー

2016/06/03 15:48

NameError: global name 'consumedfloor' is not definedのエラーはどのように解決すればよろしいでしょうか。初心者で申し訳ございません。
sharow

2016/06/03 16:13

それはあなたが使ってる変数名なので、知りませんとしか言い様がありません…。
sharow

2016/06/03 16:24

本当に気を付けて1文字ずつ確認してみてください。
退会済みユーザー

退会済みユーザー

2016/06/03 23:14

確認できました。お手数おかけいたしました。
退会済みユーザー

退会済みユーザー

2016/06/06 07:59

すみません。一度実行してみましたところ、結果が1.889になることが発覚しました。 Python2.7です。今一度ご確認いただけますでしょうか。
sharow

2016/06/06 08:09

あなたが何をしたのかわかりませんで、確認のしようがありません。問題のソースコードを質問文に追記していただけると手伝えるかもしれません。 何をしたのか説明せず状況だけ説明されても答えられませんよ。
退会済みユーザー

退会済みユーザー

2016/06/06 08:12

失礼いたしました。最初に提示されましたサンプルコードを実行してみました。 v = 1.888888888 with decimal.localcontext() as ctx: ctx.rounding = decimal.ROUND_FLOOR # -∞方向に丸める ≒ 切り捨て v = round(decimal.Decimal(v), 3) # 3桁, FLOORモードで丸め print('{}'.format(v)) こちらのコードを実行した結果が1.888の想定結果になるはずが1.889になりました。
退会済みユーザー

退会済みユーザー

2016/06/06 08:13

import decimalを最初に記入します。
sharow

2016/06/06 08:40

python2.7で試して再現できました。roundとcontextの関係が2と3で異なるのかもしれません(ドキュメントにも書いてないので分からず)。別解を解答欄に追記します。
退会済みユーザー

退会済みユーザー

2016/06/06 09:12

ありがとうございます。こちらで同じ結果になることを確認できました。いろいろお手数おかけいたしました。

0

python 小数 切り捨て
で google 検索すれば、いろいろ情報が得られると思います。

検索結果例:

...
n = 123.987654
print "round(n,3) = " + str(round(n,3)) # round(n,3) = 123.988
...

投稿2016/06/03 12:38

katoy

総合スコア22306

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

sumvalue = float(50)
consumedvalue = sumvalue / 60
return (round(consumedvalue, 3))

sumvalueをfloat型にして結果の方ではroundを使ったらどうでしょうか。

投稿2016/06/03 05:06

YanKilo_Charlie

総合スコア19

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

YanKilo_Charlie

2016/06/03 05:07

このexampleだと結果は 0.833 です。
退会済みユーザー

退会済みユーザー

2016/06/06 09:12 編集

ありがとうございます。こちらで同じ結果になることを確認できました。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。