2017-09-22 20 views
9

Câu hỏi này là không phải là tìm kiếm ý tưởng định dạng mã của nhà phát triển. Cá nhân, tôi thích sử dụng ký pháp khoa học trong mã JS của mình khi tôi có thể vì tôi tin rằng nó dễ đọc hơn. Đối với tôi, 6e8 dễ đọc hơn 600000000. Điều đó đang được nói, tôi chỉ đang tìm kiếm những rủi ro và bất lợi tiềm ẩn xác định các con số trong ký pháp khoa học trong JS. Tôi không nhìn thấy nó thường xuyên trong tự nhiên và đã tự hỏi nếu có lý do kỹ thuật cho điều đó hoặc nếu nó chỉ đơn giản là do druthers của nhà phát triển.Những cạm bẫy có sử dụng ký hiệu khoa học trong JavaScript

+0

Không chắc chắn tôi hiểu câu hỏi. Bạn có tự hỏi liệu mọi môi trường có hỗ trợ ký hiệu này không? Hoặc liệu bạn sẽ nhận được giá trị bạn đang chỉ định? –

+0

@FelixKling, điểm tốt. Tôi đã suy nghĩ nhiều hơn dọc theo dòng bảo quản giá trị ban đầu được chỉ định. Tôi mở cho bất kỳ vấn đề nào có thể xuất hiện khi sử dụng ký pháp khoa học trong JS của tôi. –

+0

@EvanWieland, không chắc chắn về rủi ro, nhưng JS cho phép ký hiệu sceintific. Wikipedia Trong hầu hết các ngôn ngữ lập trình phổ biến, 6.022E23 (hoặc 6.022e23) tương đương với 6.022 × 1023 và 1.6 × 10−35 sẽ được viết 1.6E-35 (ví dụ: Ada, Analytica, C/C++, FORTRAN (kể từ FORTRAN II) vào năm 1958), MATLAB, Scilab, Perl, Java, [4] Python, Lua, JavaScript, và những người khác). ' – user5249203

Trả lời

2

Bạn không thấy ký hiệu khoa học "thường xuyên trong môi trường hoang dã" vì những con số duy nhất mà thực sự có được gõ vào JS có xu hướng hằng:

  • hằng Mã trung tâm (như enums và mức) có xu hướng nhỏ.
  • Hằng số vật lý/toán học (như π hoặc e) có xu hướng đặc biệt cao.

Không được hưởng lợi ích gì từ ký hiệu khoa học quá nhiều.

Tôi đã thấy Plank's constant 'trong tự nhiên' như:

const h = 6.62607004e-34; 
 
console.log('Plank', h);

Nơi khác, nó thường có ý nghĩa là thời gian giới hạn, ví dụ số lượng ms trong một ngày như 864e5 . Ví dụ:

function addDaysToDate(date, days) { 
 
    if (days === 0) 
 
    return date; 
 
    date.setTime(864e5 * days + date.valueOf()); 
 
    return date; 
 
} 
 

 
const now = new Date(); 
 
const thisTimeTomorrow = addDaysToDate(now, 1); 
 
console.log('This time tomorrow', thisTimeTomorrow);

Tôi không nghĩ rằng có bất kỳ lý do kỹ thuật không sử dụng ký hiệu này, đó là chi tiết mà các nhà phát triển tránh số cứng mã hóa ở tất cả.

Tôi không nghĩ có bất kỳ rủi ro nào. Bạn có thể phải cẩn thận với các con số trong chuỗi, nhưng nếu bạn đang làm điều đó thì cú pháp này là một vấn đề nhỏ hơn nhiều, ví dụ, số nội địa hóa (ví dụ người dùng DE nhập "20.000,00", mong đợi 2e4, nhưng nhận được 2e6 nhờ bất biến định dạng số trao đổi số nghìn và dấu phân cách thập phân).

Tôi muốn thêm rằng JS sẽ ra rằng cú pháp theo mặc định anyway cho số nhỏ, nhưng tránh cho số lượng lớn lên đến một điểm (thay đổi theo trình duyệt):

console.log('Very small', 1234/100000000000) 
 
console.log('Large, but still full in some browsers', 1e17 * 1234) 
 
console.log('Large, scientific', 1e35 * 1234)

+0

Thời gian chờ chẳng hạn như '60e3'ms thường là hằng số trong phạm vi có vẻ hợp lý đối với ký hiệu khoa học. – Bergi

+0

@Bergi ah, rất tốt, và tôi cũng đã thấy điều đó! Tôi sẽ cập nhật câu trả lời. – Keith

+0

Tôi không hiểu mẫu của người dùng DE (Tôi cho rằng nó có nghĩa là người dùng Đức). Nó sẽ không là '2e4' (20000) với dấu phẩy thập phân của Đức và' 2e1' (20) với dấu thập phân tiếng Anh? –

1

Từ O. R. Mapper trong this câu hỏi:

người dùng của con người không phải là những người duy nhất muốn đọc số. Có vẻ như D3 sẽ ném một ngoại lệ khi gặp phải một dịch chuyển đổi có chứa tọa độ trong ký hiệu khoa học

Bên cạnh đó, nếu bạn muốn thay đổi đại diện chuỗi, như trái ngược với chỉ là những gì cái nhìn đen như trong mã nguồn của bạn, bạn sẽ phải cẩn thận với dữ liệu được lưu trữ/tuần tự hóa.

Ngoài ra, từ trải nghiệm, thường bạn có thể có số lượng lớn có ý nghĩa trong các chữ số riêng lẻ của họ như ID hoặc số điện thoại. Trong trường hợp này, việc giảm những con số này thành ký hiệu khoa học sẽ làm tổn thương khả năng đọc.

+0

Tôi không thấy cách này báo giá có liên quan ở đây. Câu hỏi bạn liên kết là về cách JavaScript chuyển đổi số lớn thành chuỗi. Đó không phải là về * chỉ định * số trong ký pháp khoa học (câu hỏi này). –

+0

Bạn nói đúng, nó chỉ có liên quan nếu anh ta làm những gì tôi đã đề cập trong câu thứ hai của tôi: 'Ngoài ra, nếu bạn muốn thay đổi biểu diễn chuỗi, trái ngược với những gì trông giống như trong nguồn của bạn ...' đặt đầu tiên. – code11

+1

Nhưng điều đó xảy ra bất kể sử dụng ký pháp khoa học. Nó xảy ra với tất cả các số lớn hơn một giá trị nhất định. –

1

E-notation cho biết số cần được nhân với 10 tăng với một công suất đã cho.

không phải là ký pháp hàm mũ khoa học. Một lỗ hổng là e"số lần tăng lên đến sức mạnh của" trong JavaScript không phải là The number e cơ sở của logarit tự nhiên, được trình bày tại trình duyệt dưới dạng Math.E. Đối với các cá nhân quen thuộc với hằng số toán học e, JavaScript e có ý nghĩa hoàn toàn khác. 6 * Math.pow(10, 8) trả về kết quả mong đợi và không bao gồm việc sử dụng JavaScript artifact e.

Mặc dù E là viết tắt của số mũ, các ký hiệu thường được gọi là (khoa học) E-ký hiệu chứ không phải là (khoa học) mũ ký hiệu. Việc sử dụng ký hiệu điện tử tạo điều kiện nhập dữ liệu và dễ đọc trong giao tiếp văn bản vì nó giảm thiểu tổ hợp phím, tránh giảm kích thước phông chữ và cung cấp hiển thị đơn giản và súc tích hơn, nhưng không được khuyến khích trong ấn phẩm. Submission Guidelines for Authors: HPS 2010 Midyear Proceedings

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