php float变成字符串,php – 为什么推动将float属性转换为字符串?

我只是注意到,推进将数值转换为生成的setter方法中的字符串.

我的问题是,因为我使用德语语言环境,浮点值插入逗号而不是点.例如:“3.5”产生字符串“3,5”.

我正在使用PostgreSQL,显然期望3.5.

版本信息:

如果它是相关的,我使用:PHP 5.3.9,Propel 1.6与Symfony 2.2.

细节:

表定义如下所示:

...

...

生成的setAmount()方法如下所示:

public function setAmount($v)

{

if ($v !== null && is_numeric($v)) {

$v = (string) $v;

}

if ($this->amount !== $v) {

$this->amount = $v;

$this->modifiedColumns[] = AccountEntryPeer::AMOUNT;

}

return $this;

} // setAmount()

保存对象会导致PostgreSQL错误:

Invalid text representation: 7 ERROR: invalid input syntax for type numeric: "3,5"

我花了一段时间才找到转换发生的地方.正如您所看到的,float值正在setAmount()中转换为字符串.到目前为止,我从未注意到将float值转换为string会导致包含特定于语言环境的小数分隔符的字符串.

我想知道为什么推动首先将浮点值转换为字符串?

这有什么解决方法吗?

我提出的唯一解决方法是非常丑陋和讨厌:

setlocale(LC_ALL, 'en_US');

$ae->setAmount(3.5);

setlocale(LC_ALL, 'de_DE');

解决方法:

问题是Propel将与该列相关的PHP字段转换为setter中的本机PHP类型(如@j0k提到的那样),但是如果你看得更深一点就会看到问题.在PropelTypes.php助手类中,在第76行,您可以看到“十进制”的本机PHP类型被列为“字符串”.

将其与“float”本机类型进行比较,该类型列为“double”.我不确定这是否是故意的,但无论如何,只需将列切换为type =“float”或type =“double”即可解决您的问题.

Propel应该将其转换为您的DBMS所需的任何类型.

标签:php,propel

来源: https://codeday.me/bug/20190520/1142974.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值