首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uint16转换问题

uint16转换问题
EN

Ethereum用户
提问于 2021-03-10 18:21:58
回答 2查看 303关注 0票数 1

因此,我想使用类型记录来测试这个可靠的代码,但是面临一个类型转换问题。

代码语言:javascript
复制
uint16 base;

function addNumberToBase(uint16 number_) {
    // This number must be between 1 ~ 5
    require(number_ < 1 && number_ >= 5, "This number must be between 1 ~ 5");
    base += number_;
}

这是TS测试代码,我在这里尝试了很多类型,但是没有工作。

代码语言:javascript
复制
it("Should add a number between 1 ~ 5 to base", async () => {
     const number_ : Number = 4;
     await contract.addNumberToBase(number_); 

     // But here getting this error: 
     // Error: VM Exception while processing transaction: revert This number must be between 1~5
});

使用Uint16Array和BigNumberish类型也是如此。

我的建议是,这是因为在两种语言的类型之间转换的问题。那么,请有任何有用的库来转换uint16吗?

谢谢。

EN

回答 2

Ethereum用户

回答已采纳

发布于 2021-03-10 18:59:40

这一行:

代码语言:javascript
复制
require(number_ < 1 && number_ >= 5, "This number must be between 1 ~ 5");

这是不可能的。

它应该说:

代码语言:javascript
复制
require(number_ >= 1 && number_ <= 5, "This number must be between 1 ~ 5");

如果你能得到一个JavaScript号码或一个BigNumber,我就不是100%了,因为uint16可以由JavaScript处理。对于BigNumber原生类型来说,uint256类型总是太大了。

如果返回的值看起来像一个奇怪的对象,请使用toString(10)解析它,例如var value = parseInt(response.toString(10));

希望能帮上忙。

票数 2
EN

Ethereum用户

发布于 2021-03-10 18:59:30

require中的第一个参数必须是true才能继续。目前,您的代码检查的数字小于1,大于或等于5。如果您将require调用更改为以下内容,它应该可以工作:

代码语言:javascript
复制
require(number >= 1 && number <= 5, "This number must be between 1 - 5");

这并不是将数字转换为uint16的问题,因为Web3.js和Ethers.js可以自动做到这一点。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/94472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档