2016-09-23 11:45:15 3091次浏览 2条回答 0 悬赏 20 金钱

rt,float精度设置失效。
查询源码,发现

preg_replace('/\(.+\)/', '(' . $matches[2] . ')', $this->typeMap[$matches[1]]) . $matches[3];

而其中

$matches = [
    'float(10,2) NOT NULL DEFAULT \'null\' COMMENT \'asdf\'',
    'float',
    '10,2',
    ' NOT NULL DEFAULT \'null\' COMMENT \'asdf\'',
];
$this->typeMap[$matches[1]]) = 'float';

导致匹配完成后,没有精度设置。
同理,如果是decimal,那么他的

$this->typeMap[$matches[1]]) = 'decimal(10,0)';

可以匹配到括号里面的。

求解这个是框架设计的问题,还是我什么地方理解错误。

补充于 2016-09-23 11:49

typeMap值在文件yii\db\mysql\QueryBuilder;
匹配方法在文件yii\db\QueryBuilder;getColumnType方法

补充于 2016-09-23 11:58

QQ截图20160923115742.png

  • 回答于 2016-09-23 12:42 举报

    你是想设置小数形式吗?如果是decimal(10,2),表示10位有效数字,2位小数

    1 条回复
    回复于 2016-09-23 13:32 回复

    呃呃呃 没有看问题么?

  • 回答于 2016-10-04 23:38 举报

    我通过 ar 取出float(7,2) 的值,如1800.00 结果是1800。1800.01正常显示,我还没有看这块源码,不知道和你说的问题是否类似

您需要登录后才可以回答。登录 | 立即注册
dingjj2010
CEO

dingjj2010

注册时间:2015-05-21
最后登录:2021-04-15
在线时长:63小时59分
  • 粉丝16
  • 金钱6440
  • 威望360
  • 积分10670

热门问题