лучший и простой способ ......
void dialog(){
AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
//alt_bld.setIcon(R.drawable.icon);
alt_bld.setTitle("Select a Group Name");
alt_bld.setSingleChoiceItems(grpname, -1, new DialogInterface
.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(),
"Group Name = "+grpname[item], Toast.LENGTH_SHORT).show();
dialog.dismiss();// dismiss the alertbox after chose option
}
});
AlertDialog alert = alt_bld.create();
alert.show();
///// grpname is a array where data is stored...
}
Куча улучшений в версии Бенедикта: "cRest += '' + cDivident;" - исправление; parseInt(divisor) позволяет передавать оба аргумента как строки; проверка пустой строки в конце заставляет всегда возвращать числовые значения; добавлены операторы var, чтобы не использовать глобальные переменные; преобразован foreach в старый стиль for, чтобы он работал в браузерах со старым Javascript; исправлена ошибка cRest == 0; (спасибо @Dan.StackOverflow).
function modulo (divident, divisor) { var cDivident = ''; var cRest = ''; for (var i in divident ) { var cChar = divident[i]; var cOperator = cRest + '' + cDivident + '' + cChar; if ( cOperator < parseInt(divisor) ) { cDivident += '' + cChar; } else { cRest = cOperator % divisor; if ( cRest == 0 ) { cRest = ''; } cDivident = ''; } } cRest += '' + cDivident; if (cRest == '') { cRest = 0; } return cRest; }
похоже, что вы стали жертвой этого: Какое наибольшее целочисленное значение JavaScript, к которому Number может перейти без потери точности?
просто повторить, что находится в другом потоке :
это 64-битные значения с плавающей запятой, наибольшее точное целое значение 2 ^ 53. однако из раздела спецификации [8.5: Number Type]:
Некоторые операторы ECMAScript работают только с целыми числами в диапазоне от –2 ^ 31 до 2 ^ 31-1 включительно или в диапазоне от 0 до 2 ^ 32-1 , включительно. Эти операторы принимают любое значение типа Number, но сначала преобразуют каждое такое значение в одно из целых чисел 2 ^ 32. См. Описания операторов ToInt32 и ToUint32 в разделах 0 и 0, соответственно
Но кредит там, где полагается. Джимми получил оттуда общепринятый ответ за то, что делал легкую работу (ну, гугл).
Наконец, мое решение:
function modulo (divident, divisor) {
cDivident = '';
cRest = '';
for each ( var cChar in divident ) {
cOperator = cRest + '' + cDivident + '' + cChar;
if ( cOperator < divisor ) {
cDivident += '' + cChar;
} else {
cRest = cOperator % divisor;
if ( cRest == 0 ) cRest = '';
cDivident = '';
}
}
return cRest;
}