2015-10-22 13 views
7

Làm cách nào để chuyển đổi số mũ Elixir thành số nguyên?Chuyển đổi số Elixir theo ký hiệu số mũ thành số nguyên

Tôi muốn chuyển đổi một cái gì đó như 1.0e2 thành 100. Tôi đã googled xung quanh cho một giải pháp nhưng đã không thể tìm thấy một.

+3

Hóa ra bạn có thể sử dụng 'trunc (số)' và nó sẽ chuyển đổi một số trong ký hiệu mũ để một số nguyên. 'trunc (1.0e2) => 100' Lưu ý - thao tác này không hoạt động đối với phao, vì nó sẽ cắt ngắn số thập phân. –

+0

'1.0e2' là một phao. '100' là một số nguyên. Bạn đang cố gắng chuyển đổi từ float sang int? – jdl

Trả lời

6

Những gì bạn gọi thực sự chỉ là một số điểm nổi viết bằng scientific notation, đôi khi còn được gọi là mũ ký hiệu. Số thực hiện thực tế thực sự chỉ là một phần của toàn bộ điều này. Cùng với mantissa nó cho phép chúng tôi để thuận tiện đại diện cho số rất lớn và/hoặc nhỏ:

mantissa * (10^exponent) 

Vì vậy, trong Elixir, như trong nhiều ngôn ngữ khác, số 1.23 * (10^5) có thể được viết như 1.23e5. Nếu bạn gõ ví dụ số của bạn 1.0e2 vào iex, bạn sẽ thấy rằng nó thực sự chỉ là một sự tiện lợi trên số dấu chấm động:

iex> 1.0e2 
100.0 

Vậy câu hỏi nên thực sự là: "Làm thế nào để chuyển đổi một phao cho một số nguyên? ". Câu trả lời cho điều này là bạn có thể sử dụng một trong các chức năng sau đây để đạt được điều này:

  • Kernel.round/1 - vòng
  • Kernel.trunc/1 - thả chữ số sau dấu thập phân
  • Float.round/2 - tròn với độ chính xác
  • Float.floor/2 - tròn với độ chính xác
  • Float.ceil/2 - làm tròn xuống với độ chính xác

Các chức năng Kernelallowed in guard tests và bạn không cần đặt trước Kernel. để gọi cho chúng. Chức năng Float bổ sung cho phép bạn chỉ định độ chính xác để bảo toàn một số chữ số sau dấu thập phân. Với ví dụ của bạn nó không thực sự quan trọng mà bạn sử dụng, bởi vì 100.0 là một số nguyên. Hành vi của các chức năng nêu trên tuy nhiên được minh họa tốt nhất với một số khác, nói 1.55:

iex> round(1.55) 
2 

iex> trunc(1.55) 
1 

iex> Float.round(1.55) 
2.0 

iex> Float.round(1.55, 1) 
1.6 

iex> Float.floor(1.55) 
1.0 

iex> Float.floor(1.55, 1) 
1.5 

iex> Float.ceil(1.55) 
2.0 

iex> Float.ceil(1.55, 1) 
1.6 
+1

Cảm ơn bạn đã phản hồi kỹ lưỡng! –

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