首页 新闻 会员 周边

C# 十进制和三十六进制的互相转换算法(请考虑比较大的十进制数比如Int64内的19个9)

0
悬赏园豆:40 [已关闭问题] 关闭于 2016-02-29 19:41

http://tool.oschina.net/hexconvert/

http://www.kwuntung.net/hkunit/base/base.php

网上两个在线进制转换工具,然后我用博客园部分人测试了下结果都不准确,从10进制

999999999999999999(18个9)转成36进制 为:7lieexzx4kws

但是 7lieexzx4kws 转成10进制 却结果不是 18个9了,分别为:1000000000000000000,

999999999999999842 也请一并解惑

进制转换的参数应该使用 Int64 或者long ,大部分都是int。。

问题补充:

经过三个在线进制转换工具的测试发现,10进制的数不能超过15位,否则由36进制转回10进制的时候就不是原来的10进制数了;

测试数据使用的是:

10进制:999999999999...(16个9) =》36进制:rcn1hssighs

36进制: rcn1hssighs=》10进制:100000000000000000

那么疑问是10进制的有效最大数字就是15个9了么

十四的主页 十四 | 初学一级 | 园豆:46
提问于:2016-02-26 09:03
< >
分享
所有回答(2)
0

1.如果用long的话就要判断最大值.如果不限制大小就要用字符串

2.如果转来再转去却不一样了.那就是算法有问题.没什么好解释的

吴瑞祥 | 园豆:29449 (高人七级) | 2016-02-26 10:28

 但在线转换工具上转换9999...(18个9)转成36进制,再转回10进制都是不一样,难道每个在线工具都不对?,请教有没具体算法实现呢

第三个个在线工具:http://www.atool.org/hexconvert.php

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2016-02-26 10:32
0

建议自己写个进制转换的算法就行了。

明Lam | 园豆:615 (小虾三级) | 2016-02-26 14:45

 自己写的转换是对的 但和在线工具的16位以后转换结果不太一样。。。

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2016-02-26 14:57

@十四: 那就自己笔算验证下,看是你的对还是在线工具对吧,在线工具也不一定对的,就像你说的长度太大的在线工具可能没考虑到,这时你可以根据自己的需求是要用字符串类型的去转换还是换个精度更高的进行处理了。

支持(0) 反对(0) 明Lam | 园豆:615 (小虾三级) | 2016-02-26 15:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册