phpfloattoint
⑴ php 怎么将字符转成数字
第一种转换方式: 强制转换;
代码:
(1)phpfloattoint扩展阅读:
PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:
(int)、(integer):转换成整形;
(float)、(double)、(real):转换成浮点型;
(string):转换成字符串;
(bool)、(boolean):转换成布尔类型;
(array):转换成数组;
(object):转换成对象。
⑵ php 字符串转float
思路:
先把字符串转成10进制整数,再把整数转成float数值
具体代码
$str='0f00391a';
$d=hexdec($str);
var_mp($d);
$f=floatval($d);
var_mp($f);
输出:
int(251672858)
float(251672858)
⑶ 在php中,怎样把数字转化为字符串
1、首先需要新建一个74.php。
⑷ php整数用强制转换命令(double)转换为浮点数。
要用printf格式化输出。
php好像不需要强制转化类型,会自动转化的。
⑸ php怎么查看一个变量的占用内存
我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存:
[php] view plain print?
<?php
echo memory_get_usage() , '<br>';
$start = memory_get_usage();
$a = Array();
for ($i=0; $i<1000; $i++) {
$a[$i] = $i + $i;
}
$mid = memory_get_usage();
echo memory_get_usage() , '<br>';
for ($i=1000; $i<2000; $i++) {
$a[$i] = $i + $i;
}
$end = memory_get_usage();
echo memory_get_usage() , '<br>';
echo 'argv:', ($mid - $start)/1000 ,'bytes' , '<br>';
echo 'argv:',($end - $mid)/1000 ,'bytes' , '<br>';
输出是:
353352
437848
522024
argv:84.416bytes
argv:84.176bytes
大概了解1000
个元素的整数数组需要占用 82k 内存,平均每个元素占用 84 个字节。而纯 C 中整体只需要 4k(一个整型占用4byte * 1000
)。memory_get_usage() 返回的结果并不是全是被数组占用了,还要包括一些 PHP
运行本身分配的一些结构,可能用内置函数生成的数组更接近真实的空间:
[php] view plain print?
<?php
$start = memory_get_usage();
$a = array_fill(0, 10000, 1);
$mid = memory_get_usage(); //10k elements array;
echo 'argv:', ($mid - $start )/10000,'byte' , '<br>';
$b = array_fill(0, 10000, 1);
$end = memory_get_usage(); //10k elements array;
echo 'argv:', ($end - $mid)/10000 ,'byte' , '<br>';
得到:
argv:54.5792byte
argv:54.5784byte
从这个结果来看似乎一个数组元素大约占用了54个字节左右。
首先看一下32位机C语言各种类型占用的字节:
[cpp] view plain print?
#include "stdafx.h"
//#include <stdio.h>
int main() {
printf("int:%d\nlong:%d\ndouble:%d\nchar*:%d\nsize_t:%d\n",
sizeof(int), sizeof(long),
sizeof(double), sizeof(char *),
sizeof(size_t));
return 0;
}
int:4
long:4
double:8
har*:4
size_t:4
在PHP中都使用long类型来代表数字,没有使用int类型
大家都明白PHP是一种弱类型的语言,它不会去区分变量的类型,没有int float char *之类的概念。
我们看看php在zend里面存储的变量,PHP中每个变量都有对应的 zval, Zval结构体定义在Zend/zend.h里面,其结构:
[cpp] view plain print?
typedef struct _zval_struct zval;
struct _zval_struct {
/* Variable information */
zvalue_value value; /* The value 1 12字节(32位机是12,64位机需要8+4+4=16) */
zend_uint refcount__gc; /* The number of references to this value (for GC) 4字节 */
zend_uchar type; /* The active type 1字节*/
zend_uchar is_ref__gc; /* Whether this value is a reference (&) 1字节*/
};
PHP使用一种UNION结构来存储变量的值,即zvalue_value 是一个union,UNION变量所占用的内存是由最大
成员数据空间决定。
[cpp] view plain print?
typedef union _zvalue_value {
long lval; /* long value */
double dval; /* double value */
struct { /* string value */
char *val;
int len;
} str;
HashTable *ht; /* hash table value */
zend_object_value obj; /*object value */
} zvalue_value;
最大成员数据空间是struct str,指针占*val用4字节,INT占用4字节,共8字节。
struct zval占用的空间为8+4+1+1 = 14字节,
其实呢,在zval中数组,字符串和对象还需要另外的存储结构,数组则是一个 HashTable:
HashTable结构体定义在Zend/zend_hash.h.
[cpp] view plain print?
typedef struct _hashtable {
uint nTableSize;//4
uint nTableMask;//4
uint nNumOfElements;//4
ulong nNextFreeElement;//4
Bucket *pInternalPointer; /* Used for element traversal 4*/
Bucket *pListHead;//4
Bucket *pListTail;//4
Bucket **arBuckets;//4
dtor_func_t pDestructor;//4
zend_bool persistent;//1
unsigned char nApplyCount;//1
zend_bool bApplyProtection;//1
#if ZEND_DEBUG
int inconsistent;//4
#endif
} HashTable;
HashTable 结构需要 39 个字节,每个数组元素存储在 Bucket 结构中:
[cpp] view plain print?
typedef struct bucket {
ulong h; /* Used for numeric indexing 4字节 */
uint nKeyLength; /* The length of the key (for string keys) 4字节 */
void *pData; /* 4字节*/
void *pDataPtr; /* 4字节*/
struct bucket *pListNext; /* PHP arrays are ordered. This gives the next element in that order4字节*/
struct bucket *pListLast; /* and this gives the previous element 4字节 */
struct bucket *pNext; /* The next element in this (doubly) linked list 4字节*/
struct bucket *pLast; /* The previous element in this (doubly) linked list 4字节*/
char arKey[1]; /* Must be last element 1字节*/
} Bucket;
Bucket
结构需要 33 个字节,键长超过四个字节的部分附加在 Bucket 后面,而元素值很可能是一个 zval 结构,另外每个数组会分配一个由
arBuckets 指向的 Bucket 指针数组, 虽然不能说每增加一个元素就需要一个指针,但是实际情况可能更糟。这么算来一个数组元素就会占用
54 个字节,与上面的估算几乎一样。
一个空数组至少会占用 14(zval) + 39(HashTable) + 33(arBuckets) = 86
个字节,作为一个变量应该在符号表中有个位置,也是一个数组元素,因此一个空数组变量需要 118
个字节来描述和存储。从空间的角度来看,小型数组平均代价较大,当然一个脚本中不会充斥数量很大的小型数组,可以以较小的空间代价来获取编程上的快捷。但如果将数组当作容器来使用就是另一番景象了,实际应用经常会遇到多维数组,而且元素居多。比如10k个元素的一维数组大概消耗540k内存,而10k
x 10 的二维数组理论上只需要 6M 左右的空间,但是按照 memory_get_usage
的结果则两倍于此,[10k,5,2]的三维数组居然消耗了23M,小型数组果然是划不来的。
⑹ php 怎么把数字型转为字符型
在要转换的变量之前加上用括号括起来的目标类型
使用3个具体类型的转换函数,intval()、floatval()、strval()
使用通用类型转换函数settype(mixed var,string type)
第一种转换方式: (int) (bool) (float) (string) (array) (object)
<?php
$num1=3.14;
$num2=(int)$num1;
var_mp($num1); //输出float(3.14)
var_mp($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_mp($flg); //输出bool(true)
var_mp($num4); //输出int(12)
?>
⑺ PHP怎么把超过10位长度的数字转换成整形求助大神!
$i="12345678910";
$i2="12245678910";
echo(float)$i-(float)$i2;//输出结果正确
$i="12345678910";
$i2="12245678910";
echo(int)$i-(int)$i2;//输出结果为0,因为int型最大为27...,所以int转换后两个值都一样
⑻ php 图象处理函数 imagestring 函数的运用
可以用imagettftext来生成,支持truetype字体
array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )
image
图像资源。见 imagecreatetruecolor()。
size
字体大小。根据 GD 版本不同,应该以像素大小指定(GD1)或点大小(GD2)。
angle
角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。
x
由 x,y 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。这和 imagestring() 不同,其 x,y 定义了第一个字符的左上角。例如 "top left" 为 0, 0。
y
Y 坐标。它设定了字体基线的位置,不是字符的最底端。
color
颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。见 imagecolorallocate()。
fontfile
是想要使用的 TrueType 字体的路径。
根据 PHP 所使用的 GD 库的不同,当 fontfile 没有以 / 开头时则 .ttf 将被加到文件名之后并且会在库定义字体路径中尝试搜索该文件名。
当使用的 GD 库版本低于 2.0.18 时,一个空格字符 而不是分号将被用来作为不同字体文件的“路径分隔符”。不小心使用了此特性将会导致一条警告信息:Warning: Could not find/open font。对受影响的版本来说唯一解决方案就是将字体移动到不包含空格的路径中去。
很多情况下字体都放在脚本的同一个目录下。下面的小技巧可以减轻包含的问题。 <?php
// Set the enviroment variable for GD
putenv('GDFONTPATH=' . realpath('.'));
// Name the font to be used (note the lack of the .ttf extension)
$font = 'SomeFont';
?>
text
文本字符串。
可以包含十进制数字化字符表示(形式为:€)来访问字体中超过位置 127 的字符。UTF-8 编码的字符串可以直接传递。
如果字符串中使用的某个字符不被字体支持,一个空心矩形将替换该字符。
imagettftext() 返回一个含有 8 个单元的数组表示了文本外框的四个角,顺序为坐下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。
例子 1. imagettftext() 例子
本例中的脚本将生成一个白色的 400x30 像素 PNG 图像,其中有黑色(带灰色阴影)Arial 字体写的“Testing...”。
<?php
// Set the content-type
header("Content-type: image/png");
// Create the image
$im = imagecreatetruecolor(400, 30);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = 'arial.ttf';
// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
⑼ php 中怎么把字符串转为整形啊 跪求!
intval()当然不行,因为已经超过int自身的长度啦,所以肯定会被截短,可以用隐性转换嘛,因为php本身就是弱类型的,所以搞不懂LZ为什么要转,在程序里面使用本来就会自动帮你转类型的,如果 非要转,可以这样:
$str = "1157425104434495489";
$int_str = $str*1;
对比一下,var_mp($str == $int_str) //输出 bool true;
⑽ PHP将在需要时自动将字符串转换为数字
代码:
(10)phpfloattoint扩展阅读:
PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:
(int)、(integer):转换成整形;
(float)、(double)、(real):转换成浮点型;
(string):转换成字符串;
(bool)、(boolean):转换成布尔类型;
(array):转换成数组;
(object):转换成对象。