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.
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.
Những gì bạn gọi mũ 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òngKernel.trunc/1
- thả chữ số sau dấu thập phânFloat.round/2
- tròn với độ chính xácFloat.floor/2
- tròn với độ chính xácFloat.ceil/2
- làm tròn xuống với độ chính xácCác chức năng Kernel
là allowed 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
Cảm ơn bạn đã phản hồi kỹ lưỡng! –
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. –
'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