【PHP浮点数的一个常见问题】教程文章相关的互联网学习教程文章

php的sprintf函数的用法 控制浮点数格式

控制浮点数打印格式浮点数的打印和格式控制是sprintf 的一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6 位数字,比如: 代码如下:sprintf("%f", 3.1415926); //结果:"3.141593" 但,有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表示打印数字的整体宽度,n 表示小数点后的位数。比如: 代码如下:sprintf(" %9.3f", 3.1415926); //右对齐:位数不够用空格补全。结果:" 3.1...

PHP数据类型之整数类型、浮点数的介绍

语法:整型值可以使用十进制,十六进制或八进制表示,前面可以加上可选的符号(- 或者 +)。 八进制表示数字前必须加上 0(零),十六进制表示数字前必须加上 0x。 $int1=100; //十进制$int2=-123; //负数$int3=0123; //八进制数$int4=0x1A;//十六进制数 echo PHP_INT_SIZE; //显示一个整数用几个字节来表示echo "<br/>";echo PHP_INT_MAX;echo "<br/>";//整数最大有多少数 (2147483647)$fmax=2147483648;var_dump(PHP_INT_MAX...

系统的讲解 - PHP 浮点数高精度运算

记录下,工作中遇到的坑 ...关于 PHP 浮点数运算,特别是金融行业、电子商务订单管理、数据报表等相关业务,利用浮点数进行加减乘除时,稍不留神运算结果就会出现偏差,轻则损失几十万,重则会有信誉损失,甚至吃上官司,我们一定要引起高度重视!浮点数运算的“锅”//加 $a = 0.1; $b = 0.7; $c = intval(($a + $b) * 10); echo $c.""; //输出:7 //减 $a = 100; $b = 99.98; $c = $a - $b; echo $c.""; //输出:0.019...

PHP浮点数运算精度问题

最近有客户反应商城订单金额总是不准确,总是相隔一分钱。检查相关代码逻辑都是正确的,就是运用了四则运算。大概推测问题可能出在浮点计算丢失精度。在《PHP程序员雷雪松的博客》中写过一篇关于JS精度不准确的文章-《JS中浮点数运算不精准》。下面PHP程序员雷雪松详细的介绍一下如何解决PHP浮点数运算精度问题。 PHP有一个BC Math高精确度的数学扩展,它可以为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任...

php浮点数(float)运算中转整形(int)问题

今天工作中遇见了一个浮点数转整形的问题,特此记录一下,防止以后再次踩坑。 实例:$f = 0.58; var_dump(intval($f * 100.0)); 也许你认为他会输出58,但是实际上他输出的是57. 原因是作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。 php中浮点数是弱类型,对于整数或者经过运算以后结果是整数的浮点数,php能当作整数对待,但类型还...

如何在PHP中获取浮点数的二进制表示形式?【代码】

有没有办法在PHP中获取浮点数的二进制表示形式?类似于Java的Double.doubleToRawLongBits(). 给定正浮点数,我想获得最大的可表示浮点数,该数字小于该数字.在Java中,我可以这样做:double x = Double.longBitsToDouble(Double.doubleToRawLongBits(d) - 1);但是我没有在PHP中看到任何类似的东西.解决方法:这不是一个完整的答案,但是我知道将浮点数放入二进制的唯一方法是使用pack()

生成PHP范围内的随机浮点数【代码】

我有一个代码,通过以下代码初始化骰子对象:public function initializeDiceSides($totalSides, $fair, $maxProbability = 100) {$maxTemp = $maxProbability;$sides = array();for ($side = 0; $side < $totalSides; $side++) {//if we want fair dice just generate same probabilities for each sideif ($fair === true) {$probability = number_format($maxProbability/$totalSides, 5);} else {//set probability to random n...

php整数和浮点数比较不匹配【代码】

我有以下代码$amount1 = 7299; $amount2 = 72.9875;$amount2_in_cents = round($amount2, 2) * 100;if ($amount1 != $amount2_in_cents) {echo "Amount $amount1 != $amount2_in_cents\n";var_dump($amount1);var_dump($amount2_in_cents); } else {echo "Amounts matched"; }这是输出Amount 7299 != 7299 int(7299) float(7299)现在我意识到浮点数和整数是不同的,但考虑到四舍五入,我希望这两个值匹配.我通过转换为int来解决它...

PHP – 浮点数精度【代码】

参见英文答案 > Is floating point math broken? 31个 $a = '35'; $b = '-34.99'; echo ($a + $b);结果在0.009999999999998 怎么了?我想知道为什么我的程序不断报告奇怪的结果. 为什么PHP没有返回预期的0.01?解决方法:因为浮点运算!=实数运算.由于不精确导致的差异的说明是,对于一些浮子a和b,(a b)-b!= a.这适用于使用浮点数的任何语言. 由于floating point是具有有限精度的二进制数,因此有...

php – 存储60亿个浮点数,便于访问文件【代码】

我需要每小时保存250个数据文件,在python中有36000个小数组[date,float,float,float],我可以用PHP轻松阅读.这需要至少运行10年,存储量为6tb. 保存这些单个文件的最佳方法是什么,我在想python struct.但是对于数据量大的工作来说,它开始变坏了? 数据的例子a = [["2016:04:03 20:30:00", 3.423, 2.123, -23.243], ["2016:23:.....], ......]编辑:空间,比解包速度和计算更重要.由于空间非常有限.解决方法:所以你有250个数据提供者,每...

PHP如何使用range()表示浮点数【代码】

有没有办法将PHP range()用于一个非常小的数字?喜欢下面?range(0.54,0.58);这样做会产生错误.range(): step exceeds the specified range in解决方法:第三个参数是步骤.阅读documentation是一个非常好的起点. 如果您阅读,您将看到可以将步骤设置为可以在限制之间递增的值.错误消息只是告诉你它不能超过0.58而不能增加0.54 – 想一想,1 0.54大于0.58! 使用此行代替将为您提供所需的输出.range(0.54, 0.58, 0.01);

php – 过滤sanizite用户输入浮点数逗号/点问题【代码】

试图找出如何以合理的方式在PHP中使用过滤器//Do sanization of user input //$_POST['amount_ecb'] can be 77,7 or 77.7$amount = filter_input(INPUT_POST, 'amount_ecb', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 如果发布值为77.7则正确设置数量,但如果用户使用逗号而不是点数设置数字(例如77,7),则金额返回77 我希望它在两种情况下都返回77.7.这有可能用过滤器解决吗? UPDATE在反馈(发布的答案)之后我仍...

php – 如何在json_encoding时获取数字浮点数(不是字符串!)?【代码】

我需要一个使用点分隔符的数字浮点数,它在(json)编码后保持数字,以便将POST标题发送到第三方API. 但是,已经尝试了几个小时,但无法让它工作. 我需要的是:{"price": 17.95,// BUT NOT:"price": "17.95" OR 17,95 }为什么?因为接收API端点检查第一个,但是对后两个值抛出非数字错误. 现在,我们在荷兰.所以我们的“语言环境”使用逗号分隔符.通过将区域设置从nl_NL设置为en_US来解决这个问题,为number_format函数提供了正确的格式,但是...

PHP.减去两个浮点数的结果【代码】

例如…$aa = 10694994.89; $bb = 10696193.86; $ab = $aa - $bb; // result is:-1198.9699999988 not the -1198,97但在这个例子中:$cc = 0.89; $dd = 0.86; $cd = $cc - $dd; //Result is: 0.03为什么区别于例子?缺乏精确度?解决方法:您的代码中的数字都不能用二进制浮点表示.它们都以某种方式被舍入.问题是为什么其中一个结果(看似)四舍五入到两位小数而不是另一个.答案在于浮点数的精度和准确度与PHP用于打印它们的精度之间的...

从php中的字符串中提取正负浮点数【代码】

对于php我必须从字符串中提取浮点数.我是regex的新手,但在大多数情况下我找到了一个对我有用的解决方案: Extract floating point numbers from a string in PHP$str = '152.15 x 12.34 x 11mm'; preg_match_all('!\d+(?:\.\d+)?!', $str, $matches); $floats = array_map('floatval', $matches[0]); print_r($floats);唯一的问题是负值;有人可以改变我的表达方式,负数也包括在内吗? 谢谢!解决方法: -?\d+(?:\.\d+)?这应该为你做...