Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

Có một cách dễ dàng hoặc chức năng tích hợp để tìm ra các vị trí thập phân của một số điểm nổi?

Số được phân tích cú pháp từ một chuỗi, vì vậy một cách là đếm các chữ số sau dấu

0.10000000000000009
1, nhưng điều đó có vẻ khá vụng về đối với tôi. Có khả năng lấy thông tin cần thiết từ đối tượng
0.10000000000000009
2 hoặc
0.10000000000000009
3 không?

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

mkrieger1

16.1k4 Huy hiệu vàng50 Huy hiệu bạc58 Huy hiệu đồng4 gold badges50 silver badges58 bronze badges

Khi được hỏi ngày 31 tháng 5 năm 2011 lúc 15:31May 31, 2011 at 15:31

ConstantiniusconstantiniusConstantinius

33.5K7 Huy hiệu vàng75 Huy hiệu bạc85 Huy hiệu Đồng7 gold badges75 silver badges85 bronze badges

5

Để lặp lại những gì người khác đã nói (vì tôi đã gõ nó ra!), Tôi thậm chí không chắc giá trị như vậy sẽ có ý nghĩa trong trường hợp số điểm nổi, vì sự khác biệt giữa biểu diễn thập phân và nhị phân; Thông thường một số có thể được đại diện bởi một số lượng hữu hạn các chữ số thập phân sẽ chỉ có một biểu diễn vô hạn trong nhị phân.

Trong trường hợp của đối tượng

0.10000000000000009
4, bạn có thể truy xuất số mũ bằng phương thức
0.10000000000000009
5, trả về được đặt tên với các thuộc tính
0.10000000000000009
6,
0.10000000000000009
7 và
0.10000000000000009
8:

>>> d = decimal.Decimal('56.4325')
>>> d.as_tuple().exponent
-4
>>> d = decimal.Decimal('56.43256436')
>>> d.as_tuple().exponent
-8

Sự phủ định của số mũ là số chữ số sau điểm thập phân, trừ khi số mũ lớn hơn

0.10000000000000009
9.

Đã trả lời ngày 31 tháng 5 năm 2011 lúc 15:59May 31, 2011 at 15:59

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

người gửisenderle

Phù vàng 141K35 Huy hiệu vàng206 Huy hiệu đồng35 gold badges206 silver badges231 bronze badges

18

"Số lượng vị trí thập phân" không phải là một tài sản mà một số điểm nổi có, vì cách chúng được lưu trữ và xử lý nội bộ.

Bạn có thể có được nhiều vị trí thập phân như bạn muốn từ một số điểm nổi. Câu hỏi là bạn muốn bao nhiêu độ chính xác. Khi chuyển đổi một số điểm nổi thành một chuỗi, một phần của quá trình đang quyết định độ chính xác.

Ví dụ, cố gắng:

1.1 - int(1.1)

Và bạn sẽ thấy rằng câu trả lời là:

0.10000000000000009

Vì vậy, trong trường hợp này, số thập phân là 17. Đây có lẽ không phải là con số bạn đang tìm kiếm.

Tuy nhiên, bạn có thể làm tròn số lượng đến một số thập phân nhất định với "vòng":

round(3.1415 - int(3.1415), 3)

Đối với trường hợp này, số lượng số thập phân được cắt xuống còn 3.

Bạn không thể nhận được "số thập phân từ một chiếc phao", nhưng bạn có thể quyết định tính chính xác và số lượng bạn muốn.

Chuyển đổi một chiếc phao thành một chuỗi là một cách để đưa ra quyết định như vậy.

Đã trả lời ngày 31 tháng 5 năm 2011 lúc 15:53May 31, 2011 at 15:53

1

Trong trường hợp bạn chỉ cần tìm vị trí thập phân của chữ số quan trọng nhất, tức là. Một giải pháp nguyên thủy khác, một giải pháp nguyên thủy khác sẽ là:

fraction = 0.001
decimal_places = int(f'{fraction:e}'.split('e')[-1])

Điều này sử dụng ký hiệu khoa học (m x 10^n), đã cung cấp số lượng vị trí thập phân dưới dạng công suất (n) của 10, mà hệ số (m) được nâng lên, tức là. -3, có nguồn gốc từ 1.000000E-03 cho ví dụ trên.

Một sự khác biệt quan trọng đối với

round(3.1415 - int(3.1415), 3)
0 là ký hiệu khoa học sẽ luôn chỉ xem xét chữ số quan trọng nhất đối với số mũ N, tương tự như
round(3.1415 - int(3.1415), 3)
1, trong khi
round(3.1415 - int(3.1415), 3)
2 trả về số mũ của chữ số ít có ý nghĩa nhất.

Định dạng chuỗi theo ký hiệu khoa học tất nhiên cũng có thể chỉ xử lý phao và không có chuỗi, do đó, bất kỳ vấn đề số học điểm nổi nào vẫn tồn tại. Tuy nhiên, đối với nhiều trường hợp sử dụng, những trường hợp trên có thể là đủ.

Đã trả lời ngày 5 tháng 12 năm 2019 lúc 16:10Dec 5, 2019 at 16:10

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

Mawallmawallmawall

1753 Huy hiệu bạc10 Huy hiệu đồng3 silver badges10 bronze badges

Cách nhanh nhất tôi tìm thấy cho các chữ số calc sau dấu thập phân và làm tròn số

Tính toán các chữ số:

a=decimal.Decimal('56.9554362669143476');
lenstr = len(str(a).split(".")[1])

Calc, kiểm tra và làm tròn:

a=decimal.Decimal('56.9554362669143476');
a = round(float(a),5) if len(str(a).split(".")[1]) > 5 else float(a)

Comparison:

$ python2 -mtimeit 'import decimal; a=decimal.Decimal('56.9554362669143476'); round(float(a),5) if a.as_tuple().exponent < -5 else float(a)'
10000 loops, best of 3: 32.4 usec per loop
$ python -mtimeit 'import decimal; a=decimal.Decimal('56.9554362669143476'); a = round(float(a),5) if len(str(a).split(".")[1]) > 5 else float(a)'
100000 loops, best of 3: 16.7 usec per loop

Đã trả lời ngày 27 tháng 4 năm 2017 lúc 16:14Apr 27, 2017 at 16:14

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

GeorgeGeorgeGeorge

Huy hiệu đồng 1161 Bạc5 Huy hiệu Đồng1 silver badge5 bronze badges

Thư viện thập phân là để làm việc với số thập phân, như trong kế toán. Nó vốn không có chức năng để trả về số lượng số thập phân. Điều này đặc biệt là một vấn đề khi bạn nhận ra rằng bối cảnh mà nó chạy theo đặt nó ở bất cứ điều gì người dùng muốn.

Nếu bạn nhận được một chuỗi, bạn có thể chuyển đổi thành thập phân, nhưng điều này sẽ giải quyết các số không để đưa bạn đến độ chính xác của bạn hoặc sử dụng cài đặt làm tròn để cắt ngắn nó.

Đặt cược tốt nhất của bạn có thể sẽ đặt cược chia cho dấu chấm trong chuỗi của bạn và đếm số lượng ký tự trong chuỗi con kết quả.

Đã trả lời ngày 31 tháng 5 năm 2011 lúc 16:59May 31, 2011 at 16:59

Spencer Rathbunspencer RathbunSpencer Rathbun

14.2k6 Huy hiệu vàng51 Huy hiệu bạc73 Huy hiệu đồng6 gold badges51 silver badges73 bronze badges

Tôi cần một cái gì đó như thế này và tôi đã thử nghiệm một số trong số này, nhanh nhất tôi phát hiện ra là:

str(number)[::-1].find('.')

Do vấn đề điểm nổi, tất cả các modulo đã cho tôi kết quả sai ngay cả với số thập phân (số) (lưu ý rằng tôi cần điều này trong một tập lệnh để sửa giá toàn bộ db)

len(str(Decimal(str(number))) % Decimal(1))) - 2

Nhu cầu đặt một chuỗi vào thập phân là khá khó chịu khi chúng ta có phao hoặc một cái gì đó như.

Đây là "băng ghế" của tôi: https://repl.it/fm8m/17

Đã trả lời ngày 18 tháng 1 năm 2017 lúc 14:36Jan 18, 2017 at 14:36

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

Jérémy Jokejérémy JokeJérémy JOKE

2412 Huy hiệu bạc15 Huy hiệu Đồng2 silver badges15 bronze badges

Nếu bạn biết rằng bạn sẽ không gặp sự cố phân tích cú pháp (hoặc nếu bạn để bản thân Python hoặc một số thư viện khác xử lý điều đó cho bạn, hy vọng sẽ xử lý các vấn đề nội địa hóa) ... chỉ cần phân tích nó và sử dụng modf. Giá trị trả về là một cặp giá trị, một trong số đó là phần tích phân, phần còn lại là phần phân số.

Đã trả lời ngày 31 tháng 5 năm 2011 lúc 15:45May 31, 2011 at 15:45

Jkerianjkerianjkerian

Huy hiệu vàng 16K345 Huy hiệu bạc59 Huy hiệu đồng3 gold badges45 silver badges59 bronze badges

1

Vì số điểm nổi Python được biểu diễn bên trong là nhị phân chứ không phải số thập phân, nên thực sự không có lối tắt nào khác ngoài việc chuyển đổi sang số thập phân. Cách duy nhất để làm điều đó là bằng cách chuyển đổi thành một chuỗi. Bạn có thể viết mã của riêng mình để thực hiện chuyển đổi thập phân và đếm các chữ số, nhưng nó sẽ là một sự trùng lặp của nỗ lực.

Đã trả lời ngày 31 tháng 5 năm 2011 lúc 15:54May 31, 2011 at 15:54

Mark Ransommark RansomMark Ransom

292K40 Huy hiệu vàng384 Huy hiệu bạc610 Huy hiệu Đồng40 gold badges384 silver badges610 bronze badges

Điều này sẽ giúp bạn ;)

1.1 - int(1.1)
0

Output:

1.1 - int(1.1)
1

Đã trả lời ngày 7 tháng 8 lúc 12:55Aug 7 at 12:55

Kurekurekure

Phù hiệu bằng đồng 1122 bronze badges

Điều này làm việc cho tôi:

1.1 - int(1.1)
2

Đã trả lời ngày 19 tháng 12 năm 2021 lúc 6:01Dec 19, 2021 at 6:01

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

1.1 - int(1.1)
3

Cách thức hoạt động là log10 (số) +1 sẽ cung cấp cho chúng ta số chữ số ở bên trái của vị trí thập phân.

Nếu chúng ta đảo ngược các chữ số thì các chữ số bên trái sẽ ở bên phải trước đó.

1.1 - int(1.1)
4

Đã trả lời ngày 22 tháng 2 lúc 12:05Feb 22 at 12:05

Đây là những gì làm việc cho tôi:

1.1 - int(1.1)
5

Đây là cách mã "bị hỏng":

1.1 - int(1.1)
6

Đã trả lời ngày 24 tháng 2 lúc 15:56Feb 24 at 15:56

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

1.1 - int(1.1)
7

Hướng dẫn python count number of decimal places - python đếm số chữ số thập phân

Suraj Rao

29.2k11 Huy hiệu vàng96 Huy hiệu bạc103 Huy hiệu đồng11 gold badges96 silver badges103 bronze badges

Đã trả lời ngày 18 tháng 5 lúc 6:00May 18 at 6:00

1

Cách thức hoạt động của nó là chuyển đổi số thập phân đầu vào thành các ký tự, khi nó phát hiện "."".", it will add the following decimal to decimals, and finally return its length

1.1 - int(1.1)
8

Khi tôi sử dụng nó

1.1 - int(1.1)
9

biến nó thành một chuỗi, vòng lặp trong nó cho đến khi bạn gặp một khoảng thời gian sau đó trừ I+1 từ độ dài của str

0.10000000000000009
0

Đã trả lời ngày 29 tháng 7 lúc 20:07Jul 29 at 20:07