Solidity 中的切片数字(例如从 uint 中提取 2 个第一个数字)

Posted

技术标签:

【中文标题】Solidity 中的切片数字(例如从 uint 中提取 2 个第一个数字)【英文标题】:Slice numbers in Solidity (For example extract 2 first number from uint) 【发布时间】:2021-01-06 19:25:38 【问题描述】:

我有这个号码:

uint256 numbers = 123456789;

我需要将前两个数字 (12) 提取到 uint 变量中。

还可以提取前一个数字之后的下两个数字:34

等等。

有什么简单的方法可以在solidity中做这样的事情吗?

我有这个功能,但它是为字符串制作的:

function getSlice(uint256 begin, uint256 end, string text) public pure returns (string) 
    bytes memory a = new bytes(end-begin+1);
    for(uint i=0;i<=end-begin;i++)
        a[i] = bytes(text)[i+begin-1];
    
    return string(a);    

就我而言,我希望 INPUT/OUTPUT 数字为 UINT256。

提前感谢您的帮助!

【问题讨论】:

我的建议是没有理由做的是 Solidity。只需更改函数 API,以便发送方 (javascript/Python) 为您执行此操作。 【参考方案1】:
  function get2First() public view returns (uint)  
    
    uint a = 123456789;
    uint b = a / 10000000;       
    return  b ;




function get2second() public view returns (uint) 
    
    uint a = 123456789;
    uint b = a / 100000;
    uint c = b % 100;
    return  c ;

【讨论】:

请解释你的答案。 modif 很抱歉。通过除以 10000000,您只保留第 2 个数字。在第二个函数中,您保留第一个数字 4,然后模数允许您删除第一个数字。

以上是关于Solidity 中的切片数字(例如从 uint 中提取 2 个第一个数字)的主要内容,如果未能解决你的问题,请参考以下文章

区块链 Solidity中uint转string 数字转字符串

Solidity 访问私有变量

Solidity优化 - 减少智能合约gas消耗

solidity智能合约语法

获取 Chainlink ETH/USD 价格反馈答案为 uint256 而不是 int solidity

Solidity基础变量总结