cấp Edwards Show 2002-03-11 19. 12. 06 UTC liên kết cố định Tôi hiểu và đồng ý với những gì bạn đang nói. Tuy nhiên, Nếu nó đang sử dụng FP nhị phân, thì điều này là không đúng. Một số ngôn ngữ có hỗ trợ toán BCD. Quay lại những ngày CP/M, hầu hết các triển khai ngôn ngữ (BASIC, FORTRAN, Pascal, bất cứ thứ gì) được hỗ trợ dấu chấm động BCD hoặc dấu phẩy động nhị phân. Hỗ trợ BCD thường được gọi là "chế độ tài chính" hoặc cái gì đó không rõ ràng đại loại như thế. Python không có BCD (ít nhất là không có trong bản phân phối tiêu chuẩn). Không phải là biểu diễn chuỗi được định dạng mà là giá trị FP nhị phân và nó hoàn toàn giống với những gì bạn nhận được trong Python. Tôi đồng ý với bạn rằng VB đang sử dụng BCD. Dù sao thì bây giờ chúng ta đang tranh luận xem có bao nhiêu thiên thần có thể nhảy múa trên đầu round() yêu cầu rằng biểu diễn bên dưới được hiểu. -- cấp Edwards 2002-03-10 16. 31. 51 UTC liên kết cố định Bài đăng của brobbins333 không _có_ chữ số thập phân. Đó là số dấu phẩy động nhị phân . Nó có "địa điểm nhị phân". Về lý thuyết, bạn có thể viết một hàm làm tròn đến N vị trí nhị phân, nhưng tôi không biết hàm đó sẽ hữu ích như thế nào. Để nói một cách có ý nghĩa về số thập phân, bạn phải sử dụng biểu diễn cơ số 10. BCD dấu phẩy động hoặc BCD điểm cố định. Các chuỗi như "123. 456" là một loại dấu phẩy động BCD và bạn có thể làm tròn đến N chữ số thập phân khi chuyển đổi từ dấu phẩy động nhị phân thành "Chuỗi/BCD FP". f = 123. 4567 s = "%0. 2f" % f Bài đăng của brobbins333 f = 123. 456 Bài đăng của brobbins333 s "Chuỗi/BCD FP" như tôi đã gọi nó có thể đại diện cho các số tốt, nhưng vì bạn không thể thực hiện bất kỳ phép toán nào trên chúng . it's of limited value. Vì bạn đang sử dụng dấu phẩy động nhị phân nên hàm round() thực sự đang chuyển đổi giá trị đầu vào của dấu phẩy động nhị phân . Nhưng, X có thể không được biểu diễn chính xác. Nếu bạn đang in the future it will have the requested number of decimal places. But, X may not be exactly representable. If you're sử dụng round(x,N) thì có lẽ bạn đang tự lừa mình. Nếu bạn _thực sự_ muốn một số có N chữ số thập phân. chủ đề về các số cơ số 10 cho Python thỉnh thoảng xuất hiện, và tôi tin rằng có sẵn các gói BCD. Nếu bạn thực sự muốn tính toán trong cơ số 10, bạn có thể muốn tìm kiếm "BCD" trong kho lưu trữ của nhóm tin. -- brobbins333 2002-03-11 18. 51. 01 giờ UTC liên kết cố định Tôi hiểu và đồng ý với những gì bạn đang nói. Tuy nhiên,ở một số ngôn ngữ (ví dụ VB) có thể trả về kết quả số từ một hàm chỉ có hai (hoặc bất kỳ số nào khác) . Không phải là một biểu diễn chuỗi được định dạng, mà là một giá trị places. Not a formatted string representation, but an actual numerical số thực tế có thể được sử dụng trong các tính toán tiếp theo. Tất nhiên, giá trị này là giá trị gần đúng và thực sự đã bị cắt bớt chứ không phải "làm tròn. " Dù sao thì, bây giờ chúng ta đang tranh cãi xem có bao nhiêu thiên thần có thể nhảy trên đầu của một chiếc ghim. Tôi hiểu vấn đề và có thể giải quyết nó. Nhóm này là một tài nguyên tuyệt vời. Cảm ơn tất cả sự giúp đỡ và thời gian của bạn. Bruce On Sun, 10 Mar 2002 16. 31. 51 GMT, được cấp lúc truy cập. com (Grant Edwards) Bài đăng của Grant Edwards Bài đăng của brobbins333 không _có_ chữ số thập phân. Đó là số dấu phẩy động nhị phân . Nó có "địa điểm nhị phân". Về lý thuyết, bạn có thể viết một hàm làm tròn đến N vị trí nhị phân, nhưng tôi không biết hàm đó sẽ hữu ích như thế nào. Để nói một cách có ý nghĩa về số thập phân, bạn phải sử dụng biểu diễn cơ số 10. BCD dấu phẩy động hoặc BCD điểm cố định. Các chuỗi như "123. 456" là một loại dấu phẩy động BCD và bạn có thể làm tròn đến N chữ số thập phân khi f = 123. 4567 s = "%0. 2f" % f Bài đăng của brobbins333 Bài đăng của Grant Edwards Bài đăng của brobbins333 Bài đăng của Grant Edwards "String/BCD FP" as I've termed it can represent numbers just fine, but since you can't do any mathematical operations on them it's of limited value. Since you're using binary floating point, the round() function is actually converting it's binary floating point input value to the closest value to X such that if X were converted to BCD in the future it will have the requested number of decimal places. But, X may not be exactly representable. If you're using round(x,N) your probably just fooling yourself. the topic of base-10 numbers for Python comes up occasionally, and I believe that there are BCD packages available. If you really want to do your calculations in base 10, you might want to search the newsgroup archives for "BCD". -- Grant Edwards grante Yow! Please come home with at me.. I have Tylenol!! visi.com hậu cần 2002-03-09 23. 57. 02 UTC liên kết cố định Tôi ngạc nhiên là cái này không có trong Câu hỏi thường gặp.Bạn đang nhìn thấy đối tượng thực chứ không phải là bản trình bày có thể in được của đối tượng đó. vòng(56. 78923, 2) vòng in(56. 78923, 2) "%f" % round(56. 78923, 2) -- - Tôi hiểu vấn đề về lỗi làm tròn với số nhị phân. hàm round() đôi khi sẽ trả về một kết quả có thể dự đoán được, như 45. 68 56. 789999999999999 What's going on here? Những gì bạn sẽ tìm thấy là một số số như 2, 0. 25, v.v. có thể được biểu diễn chính xác ở định dạng dấu phẩy động trong khi những thứ khác như 2/3 thì không thể. Chuyện là như vậy. Erik -- +------------------- . com (Có, nó hợp lệ) Erik de Castro Lopo nospam at mega-nerd.com (Yes it's valid) +---------------------------------- . Một loại thuốc thần kinh, phổ biến vào những năm 80, có thể được phát triển tại UC BSD: A psychoactive drug, popular in the 80s, probably developed at UC Berkeley hoặc nơi nào đó. Tương tự về nhiều mặt với loại thuốc chỉ kê đơn có tên là "Hệ thống V", nhưng hữu ích hơn rất nhiều. (Hoặc, ít nhất, thú vị hơn. ) Tên hóa học đầy đủ là "Phân phối tiêu chuẩn Berkeley". Erik de Castro Lopo 2002-03-10 01. 29. 18 UTC liên kết cố định Tôi biết tên bạn rất quen. Tôi đang đọc cuốn sách của bạn ngay bây giờ. VB cho một, trả về kết quả được làm tròn thích hợp trên của biểu diễn nhị phân thông thường. VB giống như hầu hết các ngôn ngữ kiểu tập lệnh (nghĩa là các ngôn ngữ được nhập không theo chuỗi) thường ẩn biểu diễn của các biến của nó. Tôi cá là C cũng có thể làm được, bạn đang thấy thực sự là hành vi của C. Vấn đề là tôi đang cố gắng sử dụng giá trị trả về của hàm round() làm thành một chuỗi có độ chính xác cần thiết. erikd at coltrane > python Python 2. 1. 2 (#1, ngày 18 tháng 1 năm 2002, 18. 05. 45) [GCC 2. 95. 4 (bản phát hành trước của Debian)] trên linux2 Nhập "bản quyền", "tín dụng" hoặc "giấy phép" để biết thêm thông tin. x = 56. 78923 Chỉ những gì bạn muốn. Tuy nhiên, hãy nhớ rằng nếu bạn muốn thao tác trên số bằng số học tiêu chuẩn, bạn cần thao tác trên x thay vì x_as_string. Erik -- brobbins333 2002-03-09 23. 41. 17 UTC liên kết cố định Tôi hiểu vấn đề lỗi làm tròn với số nhị phân.Tuy nhiên, chức năng làm tròn của các ngôn ngữ khác hoạt động xung quanh nó và trả về kết quả có thể sử dụng được. Họ có gì mà Python không có? BR ps -- tên của bạn rất quen thuộc. tôi nghĩ rằng tôi đã đọc một trong những cuốn sách của bạn. Thứ bảy, ngày 09 tháng 3 năm 2002 23. 13. 50 GMT, Erik de Castro Lopo hàm round() đôi khi sẽ trả về kết quả có thể dự đoán được, như Bài đăng của logistix Bài đăng của logistix What's going on here? Những gì bạn sẽ tìm thấy là một số số như 2, 0. 25, v.v. có thể được biểu diễn chính xác ở định dạng dấu phẩy động trong khi những thứ khác như 2/3 thì không thể. Chuyện là như vậy. Erik -- +------------------- . com (Có, nó hợp lệ) Erik de Castro Lopo nospam at mega-nerd.com (Yes it's valid) +---------------------------------- . Một loại thuốc thần kinh, phổ biến vào những năm 80, có thể được phát triển tại UC BSD: A psychoactive drug, popular in the 80s, probably developed at UC Berkeley hoặc nơi nào đó. Tương tự về nhiều mặt với loại thuốc chỉ kê đơn có tên là "Hệ thống V", nhưng hữu ích hơn rất nhiều. (Hoặc, ít nhất, thú vị hơn. ) Tên hóa học đầy đủ là "Phân phối tiêu chuẩn Berkeley". brobbins333 2002-03-10 00. 55. 39 UTC liên kết cố định Tôi biết tên bạn rất quen. Tôi đang đọc cuốn sách của bạn ngay bây giờ.Thật xuất sắc. VB cho một, trả về kết quả được làm tròn thích hợp trên các số ngoan cố này. Tôi sẵn sàng cá rằng C cũng có thể làm được, nhưng bạn nên biết rõ hơn tôi. Vấn đề là tôi đang cố gắng sử dụng giá trị trả về của hàm round() làm giá trị trả về của một hàm khác, vì vậy, hãy sử dụng Print để dọn dẹp nó< . Có gợi ý nào không? really doesn't do me any good. Any suggestions? BR Vào Chủ nhật, ngày 10 tháng 3 năm 2002 00. 16. 37 giờ GMT, Erik de Castro Lopo Bài đăng của Erik de Castro Lopo Tôi hiểu vấn đề về lỗi làm tròn với số nhị phân. biểu diễn in hiện tại với đối tượng dấu phẩy động. Tuy nhiên điều này sẽ làm tôi hơi ngạc nhiên. Bạn đã thử ví dụ cụ thể đó với các ngôn ngữ khác chưa? . Rõ ràng phương thức at Perl and it doesn't have a round function. Apparently the preferred ưa thích trong Perl là sprintf ("%. 2f", 56. 78923) trả về một chuỗi thay vì một số float. Sau khi một số float được biểu diễn dưới dạng một chuỗi, bạn sẽ có hành vi như mong muốn sau đó. ps -- tên bạn rất quen. tôi nghĩ rằng tôi đã đọc một trong những cuốn sách của bạn. I also have a couple of Free Software packages out there. Erik -- +-----------------------------------------------------------+ Erik de Castro Lopo nospam at mega-nerd.com (Yes it's valid) +-----------------------------------------------------------+ "If dolphins are so smart, why do they live in igloos?" -Eric Cartman Tại sao Python có lỗi làm tròn?Đó là sự cố xảy ra khi biểu diễn bên trong của số dấu phẩy động, sử dụng một số chữ số nhị phân cố định để biểu thị số thập phân . Rất khó để biểu diễn một số thập phân dưới dạng nhị phân nên trong nhiều trường hợp dẫn đến sai số làm tròn nhỏ.
Tại sao 0. 1 0. 2 không phải là 0. 3 con trăn?Tương tự, giá trị nhị phân của 0. 2 được lưu dưới dạng 0. 001100110. Bây giờ, khi bạn thêm 0. 1 + 0. 2 bằng Python (hoặc bằng một số ngôn ngữ lập trình khác), Python chuyển đổi 0. 1 và 0. 2 về dạng nhị phân. Sau đó, nó thực hiện phép cộng. Kết quả sẽ không bao giờ bằng 0. 3 chính xác .
Tại sao 0. 5 tròn thành 0 trong Python?Cho =0. 5, hàm round() làm tròn số thành số chẵn gần nhất . Vì vậy, 0. 5 được làm tròn thành 0 và -0 cũng vậy. 5; . 5 và 34. 5 đều được làm tròn thành 34; . 5 -34. 5 đều được làm tròn thành -34, v.v.
Tại sao Python vòng 2. 5 đến 2?Ví dụ: 2. 5 sẽ được làm tròn thành 2, vì 2 là số chẵn gần nhất và 3. 5 sẽ được làm tròn thành 4. |