PHP float金额在强制转换为整型时,发现数值不对。

今天发现一个很奇怪的问题;

我有一笔订单金额为$a = 529.80  交易时我做了金额检验:

客户端传给我的是字符串52980(分),

我从数据库取出是:529.80 然后 * 100 (变成分) $b = 52980,

然后在转为整型 intval($b),发现一个奇怪的问题,变成了52979 少了一分。然后都试了一遍,发现:

*.30  *.80  *.31  *.81  都有这个问题

具体原因还不明白。

时间: 2024-10-26 09:11:19

PHP float金额在强制转换为整型时,发现数值不对。的相关文章

c++字节数组转换为整型

http://bbs.csdn.net/topics/360132089 BYTE data[4]={0x00,0x00,0xe6,0x00};//第一句UINT a11=*(UINT*)data;//第二句 al1表示成0x0000e600al1 = data[0]<<24 + data[1]<<16 + data[2]<<8 + data[3]; al1表示成0x00e60000al1 = data[3]<<24 + data[2]<<16 

字符串数组转换为整型数组

string [] str = deptid.Split(','); int[] wxdepid = new int[str.Count()]; for(int i=0;i<wxdepid.Count();i++) { wxdepid[i] = Convert.ToInt32(str[i]); }

浮点型float数据强制转换成int整型

问题:如下代码 想获取某两个Decimal类型数之间的商的大小,结果偶尔出错(请注意是 偶尔) Decima t1; Decima t2; int shang =Convert.ToInt32(t1 / t2) ; 解决方法:将Decimal类型数据强制转换成INT整型时  会有四舍五入的过程.如下,需要用Math.Truncate方法来取整数位.所以区商时必须用此方法取整 问题代码: Decima t1=1.2m; Convert.ToInt32(t1)  得到1 Decima t2=1.7m

编译器是如何实现32位整型的常量整数除法优化的?[C/C++]

引子 在我之前的一篇文章[ ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ & C#) ]里曾经提到过编译器在处理被除数为常数的除法时,是有优化的,今天整理出来,一来可以了解是怎么实现的,二来如果你哪天要写编译器,这个理论可以用得上.此外,也算我的一个笔记. 实例 我们先来看一看编译器优化的实例.我们所说的被除数为常数的整数除法(针对无符号整型, 有符号整型我们后面再讨论),指的是,对于unsigned int a, b, c,例如:a / 10, b

浮点型数据转整型的丢失精度问题(C++)

如下代码:http://ideone.com/xcgHgw #include <iostream> using namespace std; int main() { // your code goes here int i = 0; i = 9.0 * 0.6 + 0.6; cout << i << endl; i = 9.0 * 0.6 + 0.6; cout << i << endl; i = (double)(9.0 * 0.6 + 0.

将一串字符串数字转化为整型数字

上篇文章介绍了itoa函数的实现,今天来说说atoi函数,主要思路是:将字符串从头开始读取,跳过最前面的空格以及其他无用字符:遇到正负号,做标记:之后的字符串,遇到数字则转换,遇到其他字符则直接跳出.好了,贴下代码: 1 int atoi(char str[]) 2 { 3 int flag=0; 4 int num=0; 5 int i=0; 6 while(str[i]==' '||str[i]=='\t') //判断字符串开头是否为制表符或者空格 7 { 8 i++; 9 } 10 whi

整型与浮点型相互转换的相关问题

1.当整型值转换float型值时,也可能损失数度 2.当float型值转换为整型值时,那么其结果是不可预料的 具体可以理解如下: (1)当整型值转换float型值时,也可能损失数度 假设 float f = 100: 那么f在内存中可能是99.99999,处于 浮点数的存储结构,不能达到100%的精度,只是非常的逼近你的值 (2)float可以用科学技术法,如float f = 1.1e33;这个就没办法强转给整形 3.计算机发现目标数据类型错误,不读取,归零处理.下列结果为0 int main

利用反射创建实例强制转换为接口失败小结

最近码代码是遇到一个很奇怪的问题,利用反射创建实例对象后强制转换为接口类型时抛出异常 然后看了下类的继承关系 没有问题,查看代码用 m_queryImplementAssembly = Assembly.Load(m_queryImplementAssemblyName); m_queryImplementAssembly.CreateInstance(strInstanceName);也不应该会出问题, 后来换了一种方式Activator.CreateInstance仍然无果.就这样纠结了一天

php长整型原始输出

今天调用webservice时返回一个字段是int64 长整型 原始的数值应该是 190000002101056096 而php返回时转成 1.9000000210106E+17 当传入另一个接口就报错了 解决方法 $c=1.9000000210106E+17; 1 number_format() number_format($c,0,'','') 2 sprintf sprintf("%.0f",$c);