Как сделать, чтобы decimal выводил с запятой ?
От: Peshuha Россия  
Дата: 22.05.10 16:06
Оценка:
Привет всем!

Понимаю, что надо рыскать где-тов настройках языков, стран и тд ...
Но все-таки.., как вместо вот такого вот крокодила вывести нормальное, человеческое(только с запятой)

select replace(cast(cast(Price as decimal(9, 2)) * qty as varchar(20)), '.', ',') Summa


Заранее ВСЕМ спасибо
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re: Как сделать, чтобы decimal выводил с запятой ?
От: Lloyd Россия  
Дата: 22.05.10 16:31
Оценка: 2 (2)
Здравствуйте, Peshuha, Вы писали:

P>Но все-таки.., как вместо вот такого вот крокодила вывести нормальное, человеческое(только с запятой)


Вывести куда?
Re: Как сделать, чтобы decimal выводил с запятой ?
От: wildwind Россия  
Дата: 22.05.10 18:46
Оценка: +2 :))
Здравствуйте, Peshuha, Вы писали:

P>Привет всем!


Привет, житель default city и пользователь default DBMS!
Re: Как сделать, чтобы decimal выводил с запятой ?
От: kvasya  
Дата: 22.05.10 19:05
Оценка: +2
Здравствуйте, 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 выводил с запятой ?
От: Peshuha Россия  
Дата: 23.05.10 19:19
Оценка: :)
Здравствуйте, kvasya, Вы писали:
K>Преобразования такого рода лучше все-таки оставлять на клиента.

Ог, я так тоже думаю. Хотелось пойти ленивым путем ...
Спасибо, что помогли не полениться !
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re[3]: Как сделать, чтобы decimal выводил с запятой ?
От: Peshuha Россия  
Дата: 25.05.10 10:07
Оценка:
Сделал так:

    // Так как нельзя просто и гуманно перенести локаль клиента на запросы скл-сервера, и сделать вывод decimal в нормальном клиентском виде, начнем извращение..

    // Все ниже написанное - на стороне клиента

    // Выясняем разделитель для decimal
    char sep[100] = {0};
    ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL , sep, sizeof(sep));

    // Затем, магическим способом надо определить decimal это или нет (как же таг(!) если это не четко определенные данные, то придется на серваке сделать такую отметинку для клиента :) )
    ...

    // Ну, и наконец,..
    CString txt = (LPCSTR)chnd->text;
    txt.Replace(".", sep);

    // Ура, вывод...


Если честно, то жопа !

SetLocaleInfo испортило все мои, почти созревшие, теплые чувства для winXP.
Упс! нет функции, кот просто меняет локаль или отдельные ее настройки для треада! (SetThreadLocal — наворот да и только )

Может я что-то не понял, ПЛИИИЗ ПРАВЬТЕ МЕНЯ !!!!
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re: Давай разберемся...
От: ZAMUNDA Земля для жалоб и предложений
Дата: 25.05.10 11:03
Оценка:
Здравствуйте, Peshuha, Вы писали:

P>Но все-таки.., как вместо вот такого вот крокодила вывести нормальное, человеческое(только с запятой) :)

...
Тебе куда вывести надо-то? На консоль, Grid, Excel?
Ты сделай так
select Price AS Summa

Дальше возвращённые числа преобразуй в строку стандартными функциями, он будут использовать регионалку клиентской машинки. Grid сам всё преобразует. Excel тоже сам.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[2]: Давай разберемся...
От: Peshuha Россия  
Дата: 25.05.10 15:32
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Тебе куда вывести надо-то? На консоль, Grid, Excel?

ZAM>Ты сделай так
ZAM>select Price AS Summa
ZAM>

Сорри, но это ничего не меняет

Я ызынясь, но саавсем не подумал, что надо сказать вот о чем:
данные выводятся в xml формате. Поэтому их по-тупому, нельзя впихнуть в variant, а затем отдать екселу итд

ZAM>Дальше возвращённые числа преобразуй в строку стандартными функциями, он будут использовать регионалку клиентской машинки. Grid сам всё преобразует. Excel тоже сам.


Grid и Exel не хавают строки с не теми разделителями, кот в настройках языка (попробуйте и увидите)
Нужно еще им сказать, что это — decimal/float итд (А это и мне, придется сначала выяснить)

Самое поганенькое то, что если нуна привентить валюту, то grid опять начинает воспринимать данные как строку, а если я ему передаю с сервака строку форматирования с доллером, то он вместо него впечатывает (по клиентскому локалю) рубли !

Сказать честно: плотно я этим вопросом не занимался, незачем пока (потому как если бы занялся, то точно бы решил). Так, столкнулся о стенку, нашел решение, но все равно поганько на душе, не красиво решено ! , бяка!

Вот и запостил сюда, может нет-нет да и промелькнет светлая мысль, может кто сталкивался...

Идеалом(как я вижу) было бы передача клиентского локаля на скл, а с валютой уж ченть решили бы (это уже дело техники)
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re[3]: Давай разберемся...
От: MasterZiv СССР  
Дата: 25.05.10 17:45
Оценка:
Peshuha пишет:

> Идеалом(как я вижу) было бы передача клиентского локаля на скл, а с

> валютой уж ченть решили бы (это уже дело техники)

Это как раз самое кривое решение. Тебе данные должны приходить из СУБД клиенту в
исходном, не преобразованном в строки виде. Иначе будет т.н. потеря доменной
целостности (долго объяснять, что это такое, но поверь, это очень плохо) и
все твои данные превратятся в строки. На клиенте нужным образом получай поле,
по типу данных (он всегда есть) форматируй его соотв. образом КАК ХОЧЕШЬ,
и всего-то делов. Как -- зависит от используемых библиотек и (главное) API для
доступа к БД.

При чём тут настройки локализации я вообще не понял, кстати. Ты хочешь выудить
из винды её настройки ? Ну, допустим. А SetLocaleInfo при чём тут ?
В общем, форматирующих функций думаю можно найти много, в том числе и
те, которые ты сам напишешь.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Давай разберемся...
От: ZAMUNDA Земля для жалоб и предложений
Дата: 26.05.10 11:23
Оценка:
Здравствуйте, Peshuha, Вы писали:

P>Я ызынясь, но саавсем не подумал, что надо сказать вот о чем:

P>данные выводятся в xml формате. Поэтому их по-тупому, нельзя впихнуть в variant, а затем отдать екселу итд
xml значит, ну хоть что-то. Как формируешь xml? Библиотекой или ручками?
И вообще-то xml формат имеет разделитель разрядов ".". Он от регионалки не зависим, и потому удобен.

P>Grid и Exel не хавают строки с не теми разделителями, кот в настройках языка (попробуйте и увидите) :(

Видел, выводит всё в текущей регионалке. Но я передавал числа а не строки.

P>Нужно еще им сказать, что это — decimal/float итд (А это и мне, придется сначала выяснить)

Ну это легко. Ты как данные из БД получаешь. Какая библитотека используется?

Всю информацию из тебя клещами вытаскивать приходится!!!
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.