Excel limitations???

  • Thread starter thanhvo31
  • Ngày gửi
T

thanhvo31

Thành viên sơ cấp
17/7/05
36
0
0
44
Haiphong
#1
Tôi đang dùng VBA viết một số ứng dụng nhưng khi biến có độ chính xác > 15 số thập phân thì chịu.
Điều này xác nhận trong Excel Specìication
Feature Maximum limit
Number precision 15 digits
Largest number allowed to be typed into a cell 9.99999999999999E307
Largest allowed positive number 1.79769313486231E308
Smallest allowed negative number -2.2250738585072E-308
Smallest allowed positive number 2.229E-308
Largest allowed negative number -1E-307

Nhưng trong VBA thì lại dẫn là
Data type Storage size Range
Byte 1 byte 0 to 255
Boolean 2 bytes True or False
Integer 2 bytes -32,768 to 32,767
Long
(long integer) 4 bytes -2,147,483,648 to 2,147,483,647
Single
(single-precision floating-point) 4 bytes -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values
Double
(double-precision floating-point) 8 bytes -1.79769313486231E308 to
-4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values
Currency
(scaled integer) 8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807
Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no decimal point;
+/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is
+/-0.0000000000000000000000000001
Date 8 bytes January 1, 100 to December 31, 9999
....
Như vậy ngay cả khi khai báo data dạng single hay double thì cũng không đạt đc độ chính xác.

Vậy muốn tính toán chính xác thì hết cách? Buộc phải qua Java, C hay thậm chí chỉ Javacript thì cũng tính ngon.

Mong đc các cao thủ chỉ giáo!!
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#2
Excel làm tròn số không đúng?

Còn điều này nữa, lúc trước tôi đã gặp một trường hợp khi tổng hợp dữ liệu trên Excel 2000, lẽ ra kết quả phải cho về 0, Excel lại cho về 0.000001
Như vậy trong quá trình tính toán những số rất nhỏ, Excel tính... sai mất. Điều này là sao thế hay MS chỉ giới hạn cho Excel tính như vậy thôi để tăng tốc độ tính toán, vì các ứng dụng dùng Excel không cần độ chính xác cao?
 
T

the7habitsman

Thành viên sơ cấp
10/9/05
89
0
0
Hà nội
#3
Có lẽ các phép toán những số...dài như thế này (xem hình) thì ko ngôn ngữ nào thể hiện được đâu. Phải làm = thuật toán thôi (chuyển sang dạng String ấy, ngày xa xưa học Pascal cũng phải làm cái bài tập này rồi):

proxy.php?image=http%3A%2F%2Fn.1asphost.com%2Fngocpk%2Fimages%2FBigNum.JPG&hash=537cdf2e160ac58bbd77ad1259f1c2fb
 
T

the7habitsman

Thành viên sơ cấp
10/9/05
89
0
0
Hà nội
#4
Please test this code to see the results (b(i) is True Or False?):

Dim odd_error As Double
odd_error = 3.3 - 3.1
b1 = (odd_error <= 0.2)
Debug.Print "b1 = " & b1
b3 = (odd_error = 0.2)
Debug.Print "b3 = " & b3
odd_error = 5.3 - 5.1
b2 = (odd_error <= 0.2)
Debug.Print "b2 = " & b2
b4 = (odd_error = 0.2)
Debug.Print "b4 = " & b4

odd_error = Val(5 - 4.9)
b3 = (odd_error = 0.1)
Debug.Print "b3 = " & b3

Very strange is it?
 

Thành viên trực tuyến

Không có thành viên trực tuyến.

Xem nhiều