{"content":{"title":"推荐一个Solidity 数字格式化库： solpretty","body":"合约里的数值通常非常大， 肉眼阅读非常费劲，solpretty 可以让对数字进行漂亮的格式化。\r\n\r\nsolpretty 在 [Foundry](https://learnblockchain.cn/docs/foundry/i18n/zh/) 工程下使用：\r\n\r\n使用 Foundry install 安装 solpretty:\r\n\r\n```bash\r\nforge install devtooligan/solpretty\r\n```\r\n\r\n\r\n\r\n## solpretty 用法\r\n\r\n### pp 格式化\r\n\r\nsolpretty 提供了 pp 函数：\r\n\r\n* pp(uint256 value)\r\n* pp(uint256 value, uint256 fixedDecimals)\r\n* pp(uint256 value, uint256 fixedDecimals, uint256 displayDecimals)\r\n* pp(uint256 value, uint256 fixedDecimals, uint256 displayDecimals, uint256 fixedWidth)\r\n* pp(uint256 value, memory SolPrettyOptions)\r\n\r\n\r\n\r\n不同的参数，用来支持不同的格式化显示效果， pp 函数返回的是格式化后的在字符串。\r\n\r\n例如（注释字符串为 pp 函数返回结果）： \r\n\r\n```solidity\r\nimport {pp} from \"solpretty/SolPretty.sol\";\r\n\r\npp(123123123123) //            -> \"123,123,123,123\" //  default\r\npp(123123123123, 6) //         -> \"123,123.123123\" //   fixedDecimals = 6\r\npp(123123123123, 6, 2) //      -> \"123,123.12\" //       displayDecimals = 2\r\npp(123123123123, 6, 0, 15) //  -> \"         123,123\" // fixedWidth = 15\r\n```\r\n\r\n\r\n\r\n还可自定义选项:\r\n\r\n```solidity\r\nSolPrettyOptions memory solPrettyOptions = getDefaultOptions();\r\n\r\nSolPrettyOptions.fixedDecimals = 6;\r\nSolPrettyOptions.fixedWidth = 20;\r\nSolPrettyOptions.decimalDelimeter = bytes1(\"*\");\r\nSolPrettyOptions.integerDelimeter = bytes1(\" \");\r\n\r\npp(123123123123, solPrettyOptions); // -> \"      123 123*123123\"\r\n\r\n// \r\nstruct SolPrettyOptions {\r\n    uint256 fixedDecimals; //          default 0\r\n    uint256 displayDecimals; //        default type(uint256).max\r\n    bytes1 decimalDelimter; //         default \".\"\r\n    bytes1 fractionalDelimiter; //     default \" \"\r\n    uint256 fractionalGroupingSize; // default 0\r\n    bytes1 integerDelimiter; //        default \",\"\r\n    uint256 integerGroupingSize; //    default 3\r\n    uint256 fixedWidth; //             default 0 (automatic)\r\n}\r\n```\r\n\r\n### concat \r\n\r\nsolpretty 还支持和字符串拼接，有两个拼接方法：\r\n\r\n* concat(string memory left, string memory right)\r\n* concat(string\\[] memory parts)\r\n\r\n\r\n\r\n一个用于字符串拼接，一个用于字符串数组拼接， 例如：\r\n\r\n```solidity\r\nimport {pp, SolPretty} from \"solpretty/SolPretty.sol\";\r\nusing SolPretty for string;\r\n\r\n\r\npp(1234).concat(\" Alice's balance\"); // -> \"1,234 Alice's Balance\";\r\n\r\n// 字符串数组拼接\r\nstring[] memory strings = new string[](3);\r\nstrings[0] = \"a\";\r\nstrings[1] = \"b\";\r\nstrings[2] = \"c\";\r\nconcat(strings); // -> \"abc\"\r\n```\r\n\r\n\r\n\r\n\r\n\r\n### log 打印\r\n\r\nsolpretty 支持把格式好的字符串打印输出：\r\n\r\n* log(string memory message)\r\n* log(string\\[] memory messages)\r\n\r\n\r\n\r\n例如：\r\n\r\n```solidity\r\nusing SolPretty for string;\r\n\r\nlog(\"hoagies\"); // console2.log(\"hoagies\");\r\npp(1234).log(); // console2.log(\"1,234\")\r\npp(1234).concat(\" Alice's balance\").log(); // console2.log(\"1,234 Alice's balance\")\r\n```\r\n\r\n---\r\n\r\n本文来自ChainTool，http://chaintool.tech 是一个为帮助开发者提高效率的开源区块链开发工具。"},"author":{"user":"https://learnblockchain.cn/people/14456","address":null},"history":"QmaUgcuVfdHS7TP1baNiTvDQVbHYwxe3TdYQ6p7psXKfsp","timestamp":1694702933,"version":1}