Удалить лишние знаки после запятой в типе данных с плавающей запятой на Symfony? - PullRequest
0 голосов
/ 11 июля 2011

У меня в базе данных есть фф. плавать:

1
1.5
1.7
2

Мне нужно сохранить это как есть в программе, но каким-то образом Symfony автоматически конвертирует их в ff по умолчанию:

1.00
1.50
1.70
2.00

Моя схема:

chapterno:
  type: float(4)
  fixed: false
  unsigned: true
  primary: false
  notnull: true
  autoincrement: false

трассировка xdebug до и после вызова функции:

0.4769   12560704                                 -> sfOutputEscaperIteratorDecorator->__construct() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaper.class.php:125
0.4770   12560704                                   -> sfOutputEscaper->__construct() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaperIteratorDecorator.class.php:49
0.4770   12560944                                   -> IteratorIterator->__construct() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaperIteratorDecorator.class.php:51
0.4771   12560944                                     -> Doctrine_Record->getIterator() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record.php:0
0.4771   12561384                                       -> Doctrine_Record_Iterator->__construct() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record.php:2166
0.4771   12561384                                         -> Doctrine_Record->getData() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record\Iterator.php:53
0.4771   12561416                                         -> ArrayIterator->__construct() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record\Iterator.php:53
0.4771   12562056                             -> sfOutputEscaperIteratorDecorator->key() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaperIteratorDecorator.class.php:0
0.4772   12562088                               -> IteratorIterator->key() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaperIteratorDecorator.class.php:81
0.4772   12560272                             -> sfOutputEscaperIteratorDecorator->getChapterno() G:\Duc\xampp\htdocs\msym\apps\frontend\modules\book\templates\indexSuccess.php:5
0.4772   12560424                               -> sfOutputEscaperObjectDecorator->__call() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaperObjectDecorator.class.php:0
0.4772   12560456                                 -> count() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaperObjectDecorator.class.php:47
0.4772   12560672                                 -> call_user_func_array() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\escaper\sfOutputEscaperObjectDecorator.class.php:64
0.4773   12561072                                   -> sfDoctrineRecord->__call() G:\Duc\xampp\htdocs\msym\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\record\sfDoctrineRecord.class.php:0
0.4773   12561200                                     -> substr()

Мне не нужны такие функции, как я могу отключить это?

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Похоже, ошибка для меня. Кастинг, чтобы плавать, решает это. Просто сделай это:

echo (float) $chapter->getChapterNo();

Вы также можете переопределить getChapterNo(), чтобы сделать это за вас (используйте _get в переопределении, чтобы избежать бесконечных циклов с __call().

UPDATE Я сообщил об этом здесь , так что вы можете подписаться, если хотите.

0 голосов
/ 12 июля 2011

Может быть, вам нужен этот тип в вашей схеме:

chapterno: { type: decimal, size: 2, scale: 1 }

Для удаления .0 из номера вы можете использовать этот php код:

preg_match("/([0-9](\.[1-9]))|[0-9]/", $chapterno, $match);

Конечно, $ match [0] - это необходимый результат.

...