teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2016/06/06 08:53

投稿

sharow
sharow

スコア1151

answer CHANGED
@@ -11,4 +11,25 @@
11
11
  ctx.rounding = decimal.ROUND_FLOOR # -∞方向に丸める ≒ 切り捨て
12
12
  v = round(decimal.Decimal(v), 3) # 3桁, FLOORモードで丸め
13
13
  print('{}'.format(v)) # -> 1.888
14
- ```
14
+ ```
15
+
16
+ --- 追記
17
+ 改めた点はlocalcontext()/round()を使わず、quantize()メソッドにしたこと。それと負の場合に切り捨てにならないので、ROUND_DOWNに変更しています。動作確認はPython3.5.1とPython2.7.11。
18
+ ```python
19
+ from decimal import (Decimal, ROUND_DOWN)
20
+
21
+ def round_down3(value):
22
+ value = Decimal(value).quantize(Decimal('0.001'), rounding=ROUND_DOWN)
23
+ return str(value)
24
+
25
+ print(round_down3(188888.8888888))
26
+ print(round_down3(1.8888899999))
27
+ print(round_down3(0.9999999999))
28
+ print(round_down3(-1.9999999999))
29
+
30
+ # 出力
31
+ # 188888.888
32
+ # 1.888
33
+ # 0.999
34
+ # -1.999
35
+ ```