Здравствуйте.
Как добавить пробелы между числами как на скринах? https://imgur.com/a/
Здравствуйте.
Как добавить пробелы между числами как на скринах? https://imgur.com/a/
Последний раз редактировалось scory; 02.01.2021 в 21:05.
stock AddDelimiterToInt(number, delimiter[2] = ".") { new int_string[14+1]; switch(value) { case 4..6: { } case 7..9: { } case 10..12: { } } return int_string; }
Использование:
new string[20+14+1];
Последний раз редактировалось DeimoS; 17.08.2019 в 02:48.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Ещё вариант, с поддержкой Float и других тегов.
/* FormatNumber by Slice. ------------------------- Usage: FormatNumber( number, decimals, thousand seperator, decimal point ) number - This can be any variable type (float, integer, bool, etc.) If you want the value to be printed as HEX, tag the variable with hex. Example: new myvariable = 5312851; FormatNumber( hex:myvariable ); // gives 0x00511153 Additionaly, you can print out the bits of either the first byte or the whole cell by using the following tags: bit:, bit_byte: If you get a type error, tag the variable with _. Example: new omgomg:specialVariable = omgomg:5; FormatNumber( _:specialVariable ); // gives 5 decimals - The number of decimals to show new mynumber = 50; FormatNumber( mynumber, 2 ); // gives 50.00 new Float:myfloat = 123.456; FormatNumber( myfloat, 0 ); // gives 123 thousand seperator - char between thousands new mynumber = 5000000000; FormatNumber( myfloat ); // gives 5 000 000 000 FormatNumber( myfloat, 0, ',' ); // gives 5,000,000,000 FormatNumber( myfloat, 0, 0 ); // gives 5000000000 decimal point - duh new myfloat = 50.0; FormatNumber( myfloat, 2, ' ', ',' ); // gives 50,00 FormatNumber( myfloat, 2, ' ', '~' ); // gives 50~00 You can set these constants __before__ including this file: HEX_PREFIX - default value "0x". Example: #define HEX_PREFIX "#" #include <formatnumber.inc> FormatNumber( hex:50000 ); // gives #0000C350 BIT_PREFIX - default value: "0b" DEFAULT_DECIMAL_COUNT - default value: 8 DEFAULT_THOUSAND_SEP - default value: ' ' DEFAULT_DECIMAL_POINT - default value: '.' */ #if defined _formatnumber_included #endinput #else #define _formatnumber_included #endif #if !defined HEX_PREFIX #define HEX_PREFIX "0x" #endif #if !defined BIT_PREFIX #define BIT_PREFIX "0b" #endif #if !defined DEFAULT_DECIMAL_COUNT #define DEFAULT_DECIMAL_COUNT 8 #endif #if !defined DEFAULT_THOUSAND_SEP #define DEFAULT_THOUSAND_SEP ' ' #endif #if !defined DEFAULT_DECIMAL_POINT #define DEFAULT_DECIMAL_POINT '.' #endif stock FormatNumber( { _, Float, Text3D, Menu, Text, DB, DBResult, bool, File, hex, Hex, bit, bit_byte, Bit }:xVariable, iDecimals = -1, iThousandSeparator = DEFAULT_THOUSAND_SEP, iDecimalPoint = DEFAULT_DECIMAL_POINT, iTag = tagof( xVariable ) ) { static s_szReturn[ 32 ], s_szThousandSeparator[ 2 ] = { ' ', EOS }, s_iDecimalPos, s_iChar, s_iSepPos, bool:s_isNegative ; if ( iTag == tagof( bool: ) ) { if ( xVariable ) else return s_szReturn; } else if ( iTag == tagof( Float: ) ) { if ( iDecimals == -1 ) iDecimals = DEFAULT_DECIMAL_COUNT; } else if ( iTag == tagof( hex: ) || iTag == tagof( Hex: ) ) { format( s_szReturn, sizeof( s_szReturn ), HEX_PREFIX "%04h%04h", ( xVariable & ( 0xFFFF0000 ) ) >>> 16, xVariable & ( 0x0000FFFF ) ); return s_szReturn; } else if ( iTag == tagof( bit: ) || iTag == tagof( Bit: ) ) { format( s_szReturn, sizeof( s_szReturn ), BIT_PREFIX "%08b%08b%08b%08b", ( xVariable & 0xFF000000 ) >>> 24, ( xVariable & 0x00FF0000 ) >>> 16, ( xVariable & 0x0000FF00 ) >>> 8, ( xVariable & 0x000000FF ) ); return s_szReturn; } else if ( iTag == tagof( bit_byte: ) ) { return s_szReturn; } else { if ( iDecimals > 0 ) { while ( iDecimals-- ) } s_iDecimalPos = -1; } if ( s_iDecimalPos == -1 ) else s_szReturn[ s_iDecimalPos ] = iDecimalPoint; if ( s_iDecimalPos >= 4 && iThousandSeparator ) { s_szThousandSeparator[ 0 ] = iThousandSeparator; s_iChar = s_iDecimalPos; s_iSepPos = 0; s_isNegative = s_szReturn[0] == '-'; while ( --s_iChar > _:s_isNegative ) { if ( ++s_iSepPos == 3 ) { s_iSepPos = 0; } } } return s_szReturn; }
DeimoS (22.08.2019)
Сделал свою версию
stock AddDelimiterToInt(value, const space[] = " ") { new string[16], i, k, v = 3, s; i = k/3; k %= 3; if (k != 0) { k++; } while (--i > 0) { k += v; v++; } if (value < 0) return string; }
Если параметр number имеет минимально возможное значение cellmin (-2147483648), то выражение (-number) выдаст 0. Да, так работает целочисленная арифметика: у минимального отрицательного значения нет положительного аналога, и нужно всегда иметь это в виду! Собственно, по той же причине и format() не может вывести это значение правильно, выдавая "--".
Вот здесь не совсем понятно: для чего нужно именно "10..12", если положительное число в десятичной записи не может занимать больше 10 знаков?
За примерами далеко ходить не нужно (см. примечания по багам), можно добиться и записи за пределы массива, и зависания "намертво".
Вообще, ИМХО, вариант DeimoS'а выглядит почти идеальным, не считая перестановки всех элементов массива при вставке "-" (наверняка можно реализовать это как-то получше) и ещё пары уже упомянутых нюансов. Также настораживает в том варианте повторяющийся код внутри switch, но это такая особенность Pawn, что нельзя сделать, чтобы из одного case нельзя было "провалиться" в следующий, как в C/C++. Впрочем, это не ещё значит, что такую возможность нельзя добавить в компилятор :)
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Да, точно. Если честно, уже давно не вчитывался в код, который я там понаписал. Помнил просто, что, вроде как, всё работало и этот вариант быстрее варианта с циклом, поэтому и не парился. Мой косяк :D
Эту функцию я на pastebin выкладывал ещё году в 2015-ом и, если честно, не совсем помню какой логикой я руководствовался при написании этого кода
В общем, как-то так:
Если ты про
Тут я ничего лучше пока придумать не могу. При добавлении разделителя минус всё равно нужно учитывать, чтоб функция не добавила разделитель прямо после минуса в числах, а-ля "-100" или "-100000".
Последний раз редактировалось DeimoS; 29.08.2019 в 12:16.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
А точки или запятые можно ли так поставить
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)