php整數用強制轉換命令 double 轉換為浮點數

時間 2022-04-13 15:10:10

1樓:義烏人才網

要用printf格式化輸出。

php好像不需要強制轉化型別,會自動轉化的。

2樓:手機使用者

php好像不需要強制轉化型別,會自動轉化的。

3樓:匿名使用者

number_format($score,'2','.',',')

4樓:愛笑的柯南推理

這裡以c語言的浮點數為例,在ieee浮點標準下,整數轉換為浮點數的過程做一些直觀的分析和具體的實現,ieee浮點數的標準細節詳見(http://en.wikipedia.

org/wiki/ieee_754-2008)。

在c語言中,使用float和double型別資料分別對應單精度和雙精度的浮點格式。以float為例,由於float是32位,int在32位機器上也是32位。因此,float必然不能對所有的int進行準確的表示。

實際上,在數軸上,浮點數所能表示的數呈非均勻的分佈。舉例如下圖。

.     . -3  .

   .  .  .

-2  . . .

  -1..........0.........1..

 . .   .

 2 .  .     .

      3.       .

圖中的點代表float可表示的數,可以看出,在所能表示的數中,接近0的比較密集,遠離0的則步長逐漸增大。具體的步長可以根據浮點數標準算出。

以float為例,符號位1位,階碼8位,位數23位。由ieee浮點的標準可知,非規格化數表示那些非常接近0.0的數。這時候,階碼域全為0.因此,非規格化數的步長為

2-23×2-127 ≈ 1.4×10-45

而非規格化數的範圍則約等於   -1.2×10-38 到1.2×10-38  在這個範圍內,float能表示的數呈均勻分佈。

而int則處在規格化數的範圍內。對於規格化數,步長不均勻。步長可表示為

2-23×2e

其中,e的取值範圍是-126~+127。顯然,隨著e增大,步長增大。因此,對於越遠離0的區域,步長越大。當e =  30時,步長為128。如下程式是一個驗證。

其中,浮點數表示2的30次方,剛階碼值e=30,程式中a陣列記錄x每次加一的結果,從輸出中可以看出,因為步長為128,在0-64次相加中,並沒有改變a[i]的值,而在後64次相加中,a[i]則保持為2的30次方+128。

因此,除了不均勻的步長以外,還需要考慮的是舍入的問題。由上面的測試中可知,c語言的舍入方法中,若整數處於步長的前半,則向下舍入,否則向上舍入。而對於剛好處於中間的數,例如上圖中a[64],這種與前後的可取的數距離相等,則採用向偶數舍入的原則。

即取表示成float形式後,最後一位為偶數(0)的數。

分析到此,開始實現,說白的就是實現一個 float f = float(integer)的功能。函式原型如下:

unsigned  float_itof(int i)

把整數i轉換為float的表示形式,然後返回對應的4個位元組。函式中不能使用float型別及其運算。

**如下:

[cpp] view plain copy

unsigned float_i2f(int i)

unsigned x,e,e;

int count;

unsigned j;

unsigned low,high;

count = 0;

x = 0;

if(i==0)

return x;

//float不採用補碼,正負數根據第一位符號位決定

if(i<0)

i = -i;

x = x|0x80000000;

j = i;

//整數均為規格化數,先進行移位

j = j<<1;

count++;

j=j<<1;

//求出階碼

e = 32-++count;

e = e+127;

//小於2的24次方,把階碼和有效位填入,完成

if((i&0xff000000)==0)

x = x|(e<<23);

x = x|(j>>9);

return x;

//大於2的24次方,要進行舍入

else

j=j>>count;

//high low即進位或捨去尾數

low = j&(~((1<<(e-23))-1));

high = low+(1<<(e-23));

//偶舍入原則

if(j-low>high-j)

j = high;

else if(j-lowj = low;

else if((low&(1<<(e-23)))==0)

j = low;

else

j = high;

if((((low>>

e++;

//填入各位,完成

x = x|(e<<23);

x = x|((j>>(e-23))&0x7fffff);

對輸入i進行 int_min 到 int_max的範圍測試,與float(i)的結果逐位元組比較。**正確。

閱讀更多

php怎麼強制轉換浮點成整形

5樓:良玉小帝

浮點轉換成整型有三種函式

1、floor ( float value) 捨去法取整又稱向下取整,將小數部分捨去取整

<?php

echo floor(6.1); //結果是6echo floor(6.9);//結果是6?>

2、ceil 進一法取整,有小數部分則進一位<?php

echo ceil(6.1); //結果是7echo ceil(6.9);//結果是7?>

3、round 浮點數進行四捨五入

<?php

echo round(6.1); //結果是6echo round(6.9);//結果是7?>

php中整形轉換為浮點型,並精確的小數點後兩位

6樓:it互聯天下

php 中sprintf函式可以將整數格式化為浮點格式。比如格式化引數:%nf;其中,n 表示小數點後的位數。比如:

<?php

$num=9.8;

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

//輸出:9.80

?>

7樓:

試試看吧,number_format(10000, 2, '.', '');//10000.00

php中浮點型怎樣轉化成整型

8樓:匿名使用者

浮點轉換成整型有三種函式

1、floor ( float value)    捨去法取整又稱向下取整,將小數部分捨去取整

<?php

echo floor(6.1); //結果是6echo floor(6.9);//結果是6?>

2、ceil  進一法取整,有小數部分則進一位<?php

echo ceil(6.1); //結果是7echo ceil(6.9);//結果是7?>

3、round 浮點數進行四捨五入

<?php

echo round(6.1); //結果是6echo round(6.9);//結果是7?>

php中如何把零轉化為浮點數0.00?

9樓:優百文

php中需要格式化

$a=0;

$b=0.9;

echo number_format($a,2);

echo "---";

echo number_format($b,2);

10樓:

number_format函式

如$a=0;

echo number_format($a, 2);//第二個引數 為保留多少位小數

php怎麼將16進位制浮點型數字轉為十進位制

11樓:匿名使用者

步驟:1、234.324轉換為二進位制 11101010.01010…… 這會損失精度,別說不知道

然後科學計數法表示為,1.1101……*2^72、127+指數7 二進位制為100001103、【1101……】,0表示正數,中間為2步驟的二進位制,後面為23位科學計數法中的小數點後數字,不足後面補0

4,每4位轉換到一個16進位制數,0100 0011 0110 ……轉換

4 3 6 ……

c語言double強制轉換,c語言 double強制轉換int

風若遠去何人留 這都被你發現了 首先 float double這類的資料是近似值 有精度問題 這一點你知道吧 也就是說列印出來的8.0000 未必是8.00000在你這個例子裡面 我改了一下 改為列印出20位小數 include int main b 5 0 puts b 你再執行一下看看 可以發現...

C語言中如何將double型資料轉換為陣列

思路是 先將double型的數字整數部分變為整型數字一一取到陣列中去 用迴圈整除可以做到,比如double i 123.456,就可以先把整數部分用j int i強制型別轉換取出放入整型變數j中,再依次取到陣列a中 a k i 10 i 10 這兩句語句就可以做到 不過數字是倒序的,最後輸出時要注意...

c語言編寫函式對於任意輸入的整數轉換為

include stdafx.h vc 6.0 include stdio.h include string.h include stdlib.h char mychange char p,int n p j 0 return strrev p void main void include int6...