Cách thực hiện phép chia trong cờ vây


88

Tôi đang cố gắng thực hiện một phép chia đơn giản trong cờ vây.

fmt.Println(3/10)

Điều này sẽ in 0 thay vì 0,3. Đây là loại kỳ lạ. Ai đó có thể vui lòng chia sẻ lý do đằng sau điều này là gì? tôi muốn thực hiện các phép toán số học khác nhau trong cờ vây.

Cảm ơn

Câu trả lời:


90

Biểu thức 3 / 10là một biểu thức hằng không định kiểu. Đặc điểm kỹ thuật nói điều này về các biểu thức hằng số

nếu các toán hạng của một phép toán nhị phân là các loại hằng số không có kiểu khác nhau, thì phép toán và đối với các phép toán không boolean, kết quả sẽ sử dụng kiểu xuất hiện sau trong danh sách này: số nguyên, chữ rune, dấu phẩy động, số phức.

310là các hằng số nguyên không có kiểu nên giá trị của biểu thức là một số nguyên không có kiểu ( 0trong trường hợp này).

Một trong các toán hạng phải là hằng số dấu phẩy động để kết quả là hằng số dấu phẩy động. Các biểu thức sau đây đánh giá thành hằng số dấu phẩy động không định kiểu 0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0

Cũng có thể sử dụng các hằng số đã nhập. Các biểu thức sau đây đánh giá thành float64hằng số 0.3:

float64(3) / float64(10)
float64(3) / 10
3 / float64(10)

In bất kỳ biểu thức nào ở trên sẽ in 0.3. Ví dụ, fmt.Println(3.0 / 10)bản in 0.3.


tôi đang lấy đầu vào giả sử nó là tỷ lệ phần trăm. Ví dụ: Nếu người dùng đưa ra 30, tôi phải thực hiện 30/100 * số nào đó. Đầu vào sẽ luôn là một số nguyên. Làm thế nào để thực hiện phép chia trong kịch bản này?
Vrushank Doshi

Chuyển đổi số nguyên thành số dấu phẩy động.
Muffin Top

tôi đã cố gắng fmt.Println (float64 (3/10)) nhưng nó mang lại cho tôi 0
Vrushank Doshi

7
@VrushankDoshi: fmt.Println(float64(3) / float64(10))cho 0.3.
peterSO

21

Như đã đề cập bởi @Cerise và theo thông số kỹ thuật

Toán tử số học áp dụng cho các giá trị số và mang lại kết quả cùng kiểu với toán hạng đầu tiên.

Trong trường hợp này, chỉ toán hạng đầu tiên cần là dấu phẩy động.

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3

Thí dụ


Đúng! chỉ là toán hạng đầu tiên
SMMousavi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.