Многие другие не указали на реальную проблему:
Операция только для целых чисел передает результат операции целому числу.
blockquote>Это обязательно означает, что результаты с плавающей запятой, которые могли бы отображать в виде целого числа, будут усечены (вырезать десятичную часть).
Что такое литье (typecasting / type conversion) вы спрашиваете?
Это зависит от реализации языка, но Wikipedia имеет довольно полное представление, и он также говорит о принуждении который является ключевой частью информации при ответе на ваш вопрос.
Если все в порядке, просто используйте web3.js для всего, что-то вроде этого должно работать:
function signTransfer(recipient, amount, tokenAddress, privateKey) {
return web3.eth.accounts.sign(
web3.utils.soliditySha3(recipient, toBN(amount), tokenAddress),
privateKey);
}