PHP数据类型转换, 保留小数

PHP数据类型转换, 保留小数

PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:

  • (int)、(integer):转换成整形
  • (float)、(double)、(real):转换成浮点型
  • (string):转换成字符串
  • (bool)、(boolean):转换成布尔类型
  • (array):转换成数组
  • (object):转换成对象

PHP数据类型有三种转换方式:

  • 在要转换的变量之前加上用括号括起来的目标类型
  • 使用3个具体类型的转换函数,intval()、floatval()、strval()
  • 使用通用类型转换函数settype(mixed var,string type)

第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)

<?php   
$num1=3.14;   
$num2=(int)$num1;   
var_dump($num1); //输出float(3.14)   
var_dump($num2); //输出int(3)   
?>

第二种转换方式:  intval()  floatval()  strval()

<?php   
    $str="123.9abc";   
    $int=intval($str);     //转换后数值:123   
    $float=floatval($str); //转换后数值:123.9   
    $str=strval($float);   //转换后字符串:"123.9"    
?>

第三种转换方式:  settype()

<?php   
    $num4=12.8;   
    $flg=settype($num4,"int");   
    var_dump($flg);  //输出bool(true)   
    var_dump($num4); //输出int(12)   
?>

php保留两位小数并且四舍五入

$num = 123213.666666; 
echo sprintf("%.2f", $num);

php保留两位小数并且不四舍五入

$num = 123213.666666; 
echo sprintf("%.2f",substr(sprintf("%.3f", $num), 0, -2));

php进一法取整

echo ceil(4.3); // 5 
echo ceil(9.999); // 10

php舍去法,取整数

echo floor(4.3); // 4 
echo floor(9.999); // 9

关注公众号,了解更多it技术(it问答网

微信支付,公众号商城支付的3个坑!!!!!!

坑1:返回msg显示签名错误 , 第一反应官网提供的路径去生成了一下签名做比较 , 结果发现签名算法是没错的。

解决方法:重置商户API密钥。(本人亲测是这样解决了问题,tx真是个坑,我严重鄙视。)

坑2:官方sdk(php版本) WxPay.JsApiPay.php文件中 public function GetOpenid(){ }  方法中,大约第50行左右。

//触发微信返回code码
$baseUrl = urlencode(‘http://’.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’].$_SERVER[‘QUERY_STRING’]);

这句对$baseUrl 的定义是有问题的!严重鄙视!!!

解决方法是修改:

$baseUrl = urlencode(‘换成你商户号申请微信支付的安全url目录’);

坑3:参考官方demo   jsapi.php 文件 代码使用中,你会发现 订单号,金额只能写死,无法把参数传递过去[get,post都无效]。这是因为:  $tools = new \JsApiPay(); $openId =$tools->GetOpenid(); 在获取openid的时候,页面来回跳转所致。

解决方法是:用session传递 1、session记录金额,订单号等信息;2、session记录openid [切忌,否则 1 依然无效]。

tips:没有看到官方对此有说明,所以总结了如上3个问题,希望有助大家解决问题。

原创作者:徐多蔚,转发请注明来源,谢谢。

 

 


关注公众号,了解更多it技术(it问答网

微信支付–签名错误问题

最近在做微信支付,调用微信的统一下单支付接口http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1时,老是返回“签名错误”,偶尔可以成功,不知道是怎么回事。我在日志中打印出生成的字符串和签名,然后用相同的数据在微信支付提供的在线支付调试工具生成签名,发现生成的签名结果一样!生成的最终xml也一样,但接口就是返回

<xml><return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名错误]]></return_msg>
</xml>

POST给微信的xml内容:

<xml>
<appid><![CDATA[wxe587fed28211bccb]]></appid>
<body><![CDATA[Demo]]></body>
<device_info><![CDATA[WEB]]></device_info>
<fee_type><![CDATA[CNY]]></fee_type>
<mch_id><![CDATA[1265056801]]></mch_id>
<nonce_str><![CDATA[ejnshgum39igp6qwpvzwb5jbwk8yigqz]]></nonce_str>
<notify_url><![CDATA[http://testpay.le1.com.cn/wechat/notify.htm]]></notify_url>
<openid><![CDATA[opZb3wsfU6RUZGxgFZ6OXVbdVxcU]]></openid>
<out_trade_no><![CDATA[1002_09745565EpuxTunUCD0AA72E]]></out_trade_no>
<product_id><![CDATA[QWE789C1523QWE78]]></product_id>
<sign><![CDATA[BF4BB39FFAFC4DF470C5A3F7784678BD]]></sign>
<spbill_create_ip><![CDATA[172.16.12.171]]></spbill_create_ip>
<total_fee><![CDATA[1]]></total_fee>
<trade_type><![CDATA[NATIVE]]></trade_type>
</xml>

 

首先 , 看到返回msg显示签名错误 , 第一反应官网提供的路径去生成了一下签名做比较 , 结果发现签名算法是没错的.

https://pay.weixin.qq.com/wiki/tools/signverify/

 

找了各种方法 , 百度谷歌搜索了一下午 , 发现很多同行都遇到了一样的问题 , 得到了以下解决方法

 1、确认公众号的appSecret和商户号的API密钥没有搞混。

  2、重置商户API密钥。(本人亲测是这样解决了问题,tx真是个坑,我严重鄙视。)

  3、确认公众号授权的域名和目录是正确的。
  4、参数body含有中文字符,改换英文签名成功,那么就转换字符编码试试。
    $dat = iconv(‘UTF-8′,’ISO8859-1’,array2xml($package));
然而 , 并没有解决问题 , 先吐槽一下微信支付这个巨坑 , 不是说它的api水平有多烂,但你至少说明白一点啊,每次看微信api都头痛。比阿里差的不是一个数量级的。调阿里api都是,优雅、简单、舒服,效率高。调微信api的感觉是,愤怒、头痛、恶心,想打人。
后续问题解决后会在该随笔追加解决方案 .
追加: 问题已解决 , 重置了三次商户密钥.(………………..)
在解决过程中又发现了一个较大的坑 , 在二维码支付模式中 , 本来的设计是生成二维码之后展示到页面上让用户去长按识别来支付 , 但是今天发现微信关闭了这个功能 , 只能是用另外一台手机去扫码支付 .
由于用户体验及其不好 , 后改用公众号支付模式 .

关注公众号,了解更多it技术(it问答网