👣 Тестовое задание для технических специалистов платежной системы Sendy



Описание:

Есть функция, которая принимает от всех модулей значение комиссии за предоставление услуг компании.

Размер комиссии может быть от 0 до 99.99

Максимальное количество знаков после запятой: 2

В базу данных записываются только целые значения, поэтому запятую приходится сдвигать на 2 знака.

Например для комиссии размером 1.5 значение в базе данных будет соответствовать 150



Работа с функцией не должна требовать каких-либо проверок перед отправкой значения.

Результат работы функции не должен требовать перепроверки со стороны модулей, т.е. возвращаемое значение всегда считается корректным.



Разработчик реализовал функцию проверки корректности ввода и преобразования вводимого значения.

Со стороны клиентов поступают жалобы на то, что вводимая ими комиссия записывается не верно или не записывается вовсе, однако все утверждают, что заполняют корректное значение с дробной частью или без.



Задание для разработчика:

Исправьте функцию проверки вводимого значения и дальнейшего преобразования для корректной записи в базу данных итогового значения.

Под данными для записи в базу данных подразумевается результат работы функции check_commission()



Задание для тестировщика:

Проверьте корректность работы фукнции изменяя входящее значение по вашему усмотрению.



В случае выявления ошибок опишите порядок действий, которые привели к ошибке.



Задание для системного аналитика: Напишите постановку данной задачи для разработчика с максимальной детализацией.



Готовое решение нужно предоставить в виде ссылки по кнопке "Share"



package main



// Импортируем библиотеки вывода и конвертации

import (

"fmt"

"strconv"

)



// Функция проверки комиссии

func check_commission(number string) uint64 {

// Конвертируем присланное значение из строки в число с запятой во временную переменную

tempValue, err := strconv.ParseFloat(number, 64)

// Если конвертация не получилась

if err != nil {

// Скажем об этом

fmt.Println("Введено не число:", number)

// И выйдем из функции

return 0

}

// Если конвертация удалась

// Умножим значение на 100, тем самым сдвинем запятую

tempValue = tempValue * 100

// Преобразуем значение в нужный тип данных

result := uint64(tempValue)

// Возвращаем корректное значение

return result

}



// Ввиду ограничений формы входящее значение от пользователя всегда в string

// Пеменная input будет эмулировать входящее значение

func main() {

// Проверяем маленькое значение

input := "0.01"

fmt.Println("Первое значение:", input)

fmt.Println("Преобразованное значение:", check_commission(input))



// Проверяем большое значение

input = "99.99"

fmt.Println("\nВторое значение:", input)

fmt.Println("Преобразованное значение:", check_commission(input))



// Проверяем если ввели не число

input = "неЧисло"

fmt.Println("\nСтроковое значение:", input)

fmt.Println("Преобразованное значение:", check_commission(input))

}



@golang_interview