当前位置: 首页 > news >正文

手搓一个数字类的变量的类型检查器

正在手搓 NumType 类型检查器, 它可以通过输入文本信息来判断这个文本它可以转换成什么类型, 挺复杂的, 在此过程了解了一些我没有见过的变量类型, 然后这两天又是为着边境检查, 选取范围感到苦恼, 不过现在已经把基础代码给写好了, 勉强能用, 暂时没有出现什么大Bug (但愿吧).

/// <summary>
/// 判断数字类型
/// </summary>
/// <param name="input">输入文本</param>
/// <returns>返回类型: null, string, int, long, float, double, decimal, biginteger</returns>
public static string NumType(string input)
{//忽略 Nullif (input == null){return "null";}else if(input.Length == 0){return "string";}string type = "string";char[] nums = {'1','2','3','4','5','6','7','8','9','0' };bool kexuejishufa = false; //是不是科学计数发for(int i = 0; i < input.Length; i++ ) //遍历文本{char t = input[i];if (i == 0 && (t == '-' || t == '+')) //是不是正负数{continue;}bool yes = false;foreach(char tt in nums) //诶个看看单个字是不是数字{if (tt == t){yes = true;break;}}if (t == 'e' || t == 'E') //科学计数发{if (kexuejishufa == true) //不可能有两个E{return "string";}else{yes = true;type = "float";kexuejishufa = true;}}else if(t == '-' || t == '+') //正负数的前面是不是 'E'{if (input[i - 1] == 'E' || input[i - 1] == 'e'){yes = true;}}else if (t == '.' && type != "float") //小数点{yes = true;type = "float";}if (yes == false) //都不是那只能是文本{return "string";}}//都跑到这里来的,说明是数字if (type != "float"){type = "int";}//然后判断大小if(type == "int") //这是整数{int int1 = 0;long long1 = 0;decimal decimal1 = 0;if (int.TryParse(input,out int1) == true) //32位整數{return "int";}else if (long.TryParse(input,out long1) == true) //64位整數{return "long";}else if (decimal.TryParse(input,out decimal1) == true) //128位數字{return "decimal";}else //超級無敵大{return "biginteger";}}else //这是浮点数{double double1 = 0;//去除符号if (input[0] == '-'){input = input.Substring(1);}//科学计数法展开if (kexuejishufa == true){int E = input.IndexOf("E", StringComparison.InvariantCultureIgnoreCase);//检查 E 旁边有没有数字if (E == 0 || E == input.Length - 1) // 1e{return "string";}else if(E == input.Length - 2 && (input[input.Length - 1] == '-' || input[input.Length - 1] == '+')) //1e+{return "string";}//获取 E 后边的数E = int.Parse(input.Substring(E + 1, input.Length - 1 - E));input = input.Substring(0, input.IndexOf("E", StringComparison.InvariantCultureIgnoreCase));int potindex = input.IndexOf(".");input = input.Replace(".", "");if (E < 0) //加小数点{int newpot = E + potindex;int length = input.Length;if (length > newpot) {for (int t = 0; t < newpot * -1 + 1; t++){input = "0" + input;}}}else //减小数点{int newpot = E + potindex;int length = input.Length;if (newpot > length) {for (int t = 0; t < newpot - length; t++){input = input + "0";}}//好像没必要再把小数点填回去, 后面只比对有多少位有效数字}//ConsoleLog(input);}//if (input.Substring(input.IndexOf("."), endindex).Length > 16 ||//    input.Substring(0, input.IndexOf(".")).Length > 16) //高精度浮点input = input.Replace(".","");//继续比对if (input.Length > 17) //高精度浮点{return "decimal";}else{if (double1 > float.MaxValue) //双精度浮点{return "double";}//else if (input.Substring(input.IndexOf("."), endindex).Length > 7 ||//    input.Substring(0, input.IndexOf(".")).Length > 7) //超过单精度范围还是双精度浮点else if (input.Length > 8){return "double";}else //单精度浮点{return "float";}}}
}
http://www.jsqmd.com/news/405488/

相关文章:

  • 财务三大报表的勾稽关系 - 智慧园区
  • 极简的Python教程-实现能基本看懂和简单编写代码
  • 【速通RAG实战:企业应用】27、为什么数据清洗和解析是 RAG 的“第 0 步“?
  • 2026年国内质量佳的分布式动力模块销售厂家推荐排行,负离子光触媒净化器/分布式适应动力模块,动力模块制造企业哪家权威 - 品牌推荐师
  • 英语_阅读_Taking Stress out of Exams_待读
  • [LangGraph] 从节点中调用子图
  • Windows中使用GCC、CMake
  • 漏洞挖掘实战指南:从入门到进阶,附高频漏洞与工具清单
  • javase学习笔记
  • 2026年2月异宠医院大盘点,靠谱之选在这里,宠物医生/宠物皮肤科/猫咪体检/母狗绝育/狗狗绝育,异宠医生最好的 - 品牌推荐师
  • How to recover a root password in Red Hat-based Linux systems
  • 【Python3教程】Python3高级篇之Markdown模块
  • vp 2025春季PAT甲级
  • 2026年国内有实力的投影机品牌排行榜,4K投影机/雾幕投影机/山体投影机出租/激光投影机出租,投影机工厂电话 - 品牌推荐师
  • 一天一个Python库:pyjwt - 安全地编码和解码JWT
  • 2026澳门租车市场分析:跨境服务,哪家租车更靠谱?商务车租赁/包车/商务租车/班车租赁/中巴租赁,租车公司推荐排行榜 - 品牌推荐师
  • 2026防火涂料性能全知道:工程选型有妙招,厚型钢结构防火涂料/超薄型钢结构防火涂料,防火涂料实力厂家口碑排行榜 - 品牌推荐师
  • python中的装饰器(1)
  • python基于flask的高校机房设备管理系统vue
  • python基于flask的社区居家日常报修维修平台vue
  • python基于flask的医疗药店连锁药店管理系统vue
  • python基于flask的幼儿园托幼机构管理系统文件vue
  • python基于flask的汽车4s店销售预约试驾vue
  • 探索经典平面手性:基于COMSOL的光学仿真之旅
  • 靠昆虫复眼思路做感知,多小镜头拼接视野,颠覆单镜头,输出全景感知。
  • [LangGrpah] Tool calls demo
  • 凸优化数学基础笔记(八):一维线性搜索法(一)
  • 工业园区的AGV调度是个头疼的问题——既要赶在客户方便的时间送货,又要控制物流成本。最近用MATLAB折腾了个遗传算法方案,实测效果不错,给大家看看实现思路
  • [AI提效-25]-与AI大模型交互:一场接纳人类社会多样性的修行
  • python基于flask的创梦宝大学生创业众筹捐赠平台vue