float — 4 байта
decimal(30,25)… что-то затрудняюсь даже сколько, но по идее больше, ведь 4 байта дадут максимум 10 разрядов.
а точности float должно хватить для деления на 28,29,30 и 31. Во всяком случае в старой версии я не имел проблем. (а вот с делением на 1024*1024 имел, и там round — действительно оказался нашим всем)
А эксперимент у Вас интересный на самом деле получился.
Так, использовать я буду просто float, чтобы не резались значения. Для Вас могу на пальцах показать. Вот абонентка 100 рублей, раз в сутки снимается часть. Для месяца с 31 днем эта часть будет составлять 3,225806451612903. Если например определить DECIMAL[10,2], то будет сохранено 3.23, тогда в сумме получится не 100 рублей, как планировалось, а 100.13. Если увеличим точность до [10,3] например и сохраним 3.226, то в сумме получим 100.006, что в округлении также даст лишнюю копейку. Ну и тд. А float без указания точности — это число с плавающей запятой, поэтому для данного случая оно больше подходит.
Вопрос про другие предложения предполагал… а хрен знает что он предполагал, видимо я надеялся, что есть какие-то возможности, о которых я даже не подозреваю :) Ну и осветить проблему хотелось, вдруг кому пригодится когда-нибудь, я про эту багу нагуглить ничего не смог, везде как раз обсуждаются вопросы различия float и decimal, а это и школьнику ясно должно быть.
Да какой тип использовать надо я и сам знаю, проблема как проще исправить, ну и так, осветить этот камень. Заметил ведь случайно, обходил другие камни, стал проверять, в старой версии счет на 3000 рублей, а в новой на рубль, тут-то я и присел. А float был использован вполне целенаправленно, там подневно снимается часть абонентской платы, и если тариф не менялся, то в сумме должна выйти искомая абонентская плата, в случае с decimal это маловероятно.
Если бы везде одинаково было прописано, то да, а то ведь где-то еще «timefrom like '201212%'» можно встретить, а вообще по базе много где используется timestamp, поэтому все равно придется как-то руками искать.
За наводку на настройку формата спасибо, хотя в данном случае не поможет, ибо база переносится на существующий кластер, где пачка других баз.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
decimal(30,25)… что-то затрудняюсь даже сколько, но по идее больше, ведь 4 байта дадут максимум 10 разрядов.
а точности float должно хватить для деления на 28,29,30 и 31. Во всяком случае в старой версии я не имел проблем. (а вот с делением на 1024*1024 имел, и там round — действительно оказался нашим всем)
А эксперимент у Вас интересный на самом деле получился.