2017-01-07 15 views
5

Tôi cần phải cắt bớt các loại thập phân mà không làm tròn & giữ nguyên kiểu thập phân, theo cách hiệu quả nhất của bộ vi xử lý.Làm thế nào để cắt bớt loại thập phân và bảo tồn như loại thập phân mà không làm tròn?

Tùy chọn Toán mà tôi tin là trả về một phao.

Tùy chọn lượng tử trả về số được làm tròn mà tôi tin.

Tùy chọn đường đi là cách xử lý tốn kém.

Có cách đơn giản, trực tiếp để chỉ cần cắt các chữ số ra một loại thập phân qua một độ dài thập phân được chỉ định không?

+0

Bạn có muốn thực sự cắt ngắn giá trị số, hay bạn cần một đại diện chuỗi giá trị với một số lượng nhất định các chữ số? – mkrieger1

+0

Tôi cần kết quả cuối cùng là loại thập phân. Tôi không muốn chuyển đổi trong và ngoài của str. Tôi có rất nhiều con số để xử lý. Điều đó sẽ thêm quá nhiều vào thời gian xử lý. – Emily

+0

Khi bạn nói 'thập phân', bạn có nghĩa là' decimal.Decimal'? –

Trả lời

7

Phương pháp quantize không có một tham số kiểm soát như thế nào giá trị được làm tròn. Các tùy chọn ROUND_DOWN dường như làm những gì bạn muốn:

  • ROUND_DOWN (đối với zero)
from decimal import Decimal, ROUND_DOWN 

def truncate_decimal(d, places): 
    """Truncate Decimal d to the given number of places. 

    >>> truncate_decimal(Decimal('1.234567'), 4) 
    Decimal('1.2345') 
    >>> truncate_decimal(Decimal('-0.999'), 1) 
    Decimal('-0.9') 
    """ 
    return d.quantize(Decimal(10) ** -places, rounding=ROUND_DOWN) 
0

Để cắt đứt thập phân quá khứ (ví dụ) nơi thập phân thứ hai:

from math import floor 
x = 3.14159 
x2 = floor(x * 100)/100 
0

Nếu tôi hiểu bạn một cách chính xác, bạn có thể sử dụng divmod (đó là một chức năng xây dựng-in). Nó chia tách một số thành số nguyên và số thập phân phần:

>>> import decimal 
>>> d1 = decimal.Decimal(3.14) 
>>> divmod(d1, 1)[0] 
Decimal('3') 
>>> d2 = decimal.Decimal(5.64) 
>>> divmod(d2, 1)[0] 
Decimal('5') 
1

Nếu bạn có một decimal, ví dụ

num = Decimal('3.14159261034899999') 

bạn có thể làm:

getcontext().prec = 13    # set the precision (no. of digits) 
getcontext().rounding = ROUND_DOWN # this will effectively truncate 

num *= 1 

Sử dụng này, bạn sẽ nhận được (print(num)):

3.141592610348 
Các vấn đề liên quan