ev_g
@ev_g
Web dev.

Почему int при делении int на int с остатком?

Объясните, пж, это нормально?

package main

import "fmt"

func main() {
	var some = 5 / 3
	fmt.Printf("%T", some) // выводит int
}
  • Вопрос задан
  • 499 просмотров
Решения вопроса 1
Это не деление с остатком, это целочисленное деление.
Если делишь одно целое число на другое целое число, работает целочисленная арифметика, потому что го это строго статически типизированный язык.
Чтобы получить дробное число, нужно явно делить одно число с плавающей точкой на другое.
package main

import "fmt"

func main() {
	var some = float64(5) / float64(3)
	fmt.Println(some)
	fmt.Printf("%T", some)
}


Происходит это потому что компьютер так работает на уровне железа. Если процессору дать команду на деление двух целых, ответом будет целое. Если дать команду на деление двух флоатов — будет флоат.
В некоторых языках компилятор или интерпретатор берут на себя смелость решать за пользователя, какой ему тип нужен и автоматически включают нужный тип деления в зависимости от ситуации (обычно включается флоат на флоат, как в JS, например). Но это может приводить к ошибкам в некоторых ситуациях.
Поэтому в го, C, C++ и еще многих других языках (обычно это статически типизированные языки), пользователь должен явно выбирать требуемый тип деления, используя нужные типы переменных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист
Да, это нормально.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы