【发布时间】:2010-10-14 00:06:47
【问题描述】:
将十进制数(以 10 为基数)转换为以 0-9、A-Z 和 a-x 作为数字的字符串表示的六十进制数(以 60 为基数)的最佳方法是什么。
我打算用 javascript 编写代码,但感谢任何帮助。
用法示例:
>>decToSex(60);
"10"
>>decToSex(123);
"23"
>>decToSex(1000000);
"4bke"
>>decToSex(1234567.89);
"5gu7.rO"
我使用的最终代码,基于 Paolo 的回答:
var decToSex = function(){
var decToSexMap = ['0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x'];
return function(number){
var negative = '';
if (number < 0){
var negative = '-';
}
number = number.toString().split('.');
var integer = Math.abs(number[0]);
var fraction = number[1];
var result = '';
do {
result = decToSexMap[integer % 60] + result;
integer = parseInt(integer / 60);
} while (integer > 0);
if (fraction){
var decimalPlaces = fraction.toString().length;
result += '.';
fraction = parseFloat('.' + fraction);
var x = 0;
do {
x++;
var res = (fraction * 60).toString().split('.');
result = result + decToSexMap[res[0]];
if (res[1]) {
fraction = parseFloat('.' + res[1]);
}
else {
break;
}
} while (x < decimalPlaces);
}
return negative + result;
}
}();
【问题讨论】:
-
不错的函数名称,但不幸的是,性别意味着 6,而不是 60 :-(
-
哦,那我得想个办法了。也许 Sexage 作为 Sexage-nary 循环使用它?
-
所有的数学题都让我头疼,但我认为我的答案可以解决问题。
-
是的,保罗,好像是这样。正要发布我的版本,谢谢:)
-
酷,干得好。完全忘记了负面因素。
标签: javascript