На "офе" ope задал вопрос: Функция возвращает число с плавающей точкой. Вопрос: как отрезать ненужные нули? Например я получил 15.140, нужно чтобы осталось только 15.14, или через эту же функцию я получил 1.200 -нужно оставить только 1.2. В совершенстве еще хотелось бы узнать, - как точку в таком числе заменить на запятую?
Я накидал вот такую функцию:
Код
stock DelZero(Float:floatval) { new string[8]; format(string, sizeof(string), "%f", floatval); new dotpos = strfind(string, "."); strdel(string, dotpos, dotpos + 1); strins(string, ",", dotpos, sizeof(string)); for(new i = strlen(string); i != dotpos + 1; i--) { if(strcmp(string[i], "0") != 0) break; strdel(string, i, i + 1); } return string; }
Работает только с положительными числами, отсутствует проверка на MAXFLOAT, но думаю, она бессмысленна, т.к. обрабатывается только 5 знаков после точки (запятой). С отрицательными числами почему-то фигня: отнимает 1 единицу разряда только.
Код
main() { new Float:d = 1.20500; printf("%s", DelZero(d)); }
Автор: OKStyle.
Код
stock DelZero(Float:floatval) // работающий чуточку быстрее, а так же работающий с отрицательными числами { new string[8]; format(string, sizeof(string), "%f", floatval); new dotpos=strfind(string, "."); string[dotpos]=','; for new i = strlen(string); (i != dotpos + 1) && (strcmp(string[i], "0")==0); string[i--]='\0' do { } return string; }
Автор: pavelost
Код
stock DelZero(Float:floatval) { new string[8]; format(string, sizeof(string), "%f", floatval); new dotpos = strfind(string, "."); string[dotpos] = ','; new i = strlen(string); while((i != dotpos + 1) && strcmp(string[i], "0") == 0) string[i--] = EOS; return string; }