Понимаю, что надо рыскать где-тов настройках языков, стран и тд ...
Но все-таки.., как вместо вот такого вот крокодила вывести нормальное, человеческое(только с запятой)
select replace(cast(cast(Price as decimal(9, 2)) * qty as varchar(20)), '.', ',') Summa
Заранее ВСЕМ спасибо
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re: Как сделать, чтобы decimal выводил с запятой ?
Здравствуйте, Peshuha, Вы писали:
P>Привет всем!
P>Понимаю, что надо рыскать где-тов настройках языков, стран и тд ... P>Но все-таки.., как вместо вот такого вот крокодила вывести нормальное, человеческое(только с запятой)
P>
P>select replace(cast(cast(Price as decimal(9, 2)) * qty as varchar(20)), '.', ',') Summa
P>
P>Заранее ВСЕМ спасибо
Преобразования такого рода лучше все-таки оставлять на клиента.
Re[2]: Как сделать, чтобы decimal выводил с запятой ?
// Так как нельзя просто и гуманно перенести локаль клиента на запросы скл-сервера, и сделать вывод decimal в нормальном клиентском виде, начнем извращение..
// Все ниже написанное - на стороне клиента
// Выясняем разделитель для decimalchar sep[100] = {0};
::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL , sep, sizeof(sep));
// Затем, магическим способом надо определить decimal это или нет (как же таг(!) если это не четко определенные данные, то придется на серваке сделать такую отметинку для клиента :) )
...
// Ну, и наконец,..
CString txt = (LPCSTR)chnd->text;
txt.Replace(".", sep);
// Ура, вывод...
Если честно, то жопа !
SetLocaleInfo испортило все мои, почти созревшие, теплые чувства для winXP.
Упс! нет функции, кот просто меняет локаль или отдельные ее настройки для треада! (SetThreadLocal — наворот да и только )
Может я что-то не понял, ПЛИИИЗ ПРАВЬТЕ МЕНЯ !!!!
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Здравствуйте, Peshuha, Вы писали:
P>Но все-таки.., как вместо вот такого вот крокодила вывести нормальное, человеческое(только с запятой) :)
...
Тебе куда вывести надо-то? На консоль, Grid, Excel?
Ты сделай так
select Price AS Summa
Дальше возвращённые числа преобразуй в строку стандартными функциями, он будут использовать регионалку клиентской машинки. Grid сам всё преобразует. Excel тоже сам.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Тебе куда вывести надо-то? На консоль, Grid, Excel? ZAM>Ты сделай так
ZAM>select Price AS Summa
ZAM>
Сорри, но это ничего не меняет
Я ызынясь, но саавсем не подумал, что надо сказать вот о чем:
данные выводятся в xml формате. Поэтому их по-тупому, нельзя впихнуть в variant, а затем отдать екселу итд
ZAM>Дальше возвращённые числа преобразуй в строку стандартными функциями, он будут использовать регионалку клиентской машинки. Grid сам всё преобразует. Excel тоже сам.
Grid и Exel не хавают строки с не теми разделителями, кот в настройках языка (попробуйте и увидите)
Нужно еще им сказать, что это — decimal/float итд (А это и мне, придется сначала выяснить)
Самое поганенькое то, что если нуна привентить валюту, то grid опять начинает воспринимать данные как строку, а если я ему передаю с сервака строку форматирования с доллером, то он вместо него впечатывает (по клиентскому локалю) рубли !
Сказать честно: плотно я этим вопросом не занимался, незачем пока (потому как если бы занялся, то точно бы решил). Так, столкнулся о стенку, нашел решение, но все равно поганько на душе, не красиво решено ! , бяка!
Вот и запостил сюда, может нет-нет да и промелькнет светлая мысль, может кто сталкивался...
Идеалом(как я вижу) было бы передача клиентского локаля на скл, а с валютой уж ченть решили бы (это уже дело техники)
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Peshuha пишет:
> Идеалом(как я вижу) было бы передача клиентского локаля на скл, а с > валютой уж ченть решили бы (это уже дело техники)
Это как раз самое кривое решение. Тебе данные должны приходить из СУБД клиенту в
исходном, не преобразованном в строки виде. Иначе будет т.н. потеря доменной
целостности (долго объяснять, что это такое, но поверь, это очень плохо) и
все твои данные превратятся в строки. На клиенте нужным образом получай поле,
по типу данных (он всегда есть) форматируй его соотв. образом КАК ХОЧЕШЬ,
и всего-то делов. Как -- зависит от используемых библиотек и (главное) API для
доступа к БД.
При чём тут настройки локализации я вообще не понял, кстати. Ты хочешь выудить
из винды её настройки ? Ну, допустим. А SetLocaleInfo при чём тут ?
В общем, форматирующих функций думаю можно найти много, в том числе и
те, которые ты сам напишешь.
Здравствуйте, Peshuha, Вы писали:
P>Я ызынясь, но саавсем не подумал, что надо сказать вот о чем: P>данные выводятся в xml формате. Поэтому их по-тупому, нельзя впихнуть в variant, а затем отдать екселу итд
xml значит, ну хоть что-то. Как формируешь xml? Библиотекой или ручками?
И вообще-то xml формат имеет разделитель разрядов ".". Он от регионалки не зависим, и потому удобен.
P>Grid и Exel не хавают строки с не теми разделителями, кот в настройках языка (попробуйте и увидите) :(
Видел, выводит всё в текущей регионалке. Но я передавал числа а не строки.
P>Нужно еще им сказать, что это — decimal/float итд (А это и мне, придется сначала выяснить)
Ну это легко. Ты как данные из БД получаешь. Какая библитотека используется?
Всю информацию из тебя клещами вытаскивать приходится!!!
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков