1樓:Shirne
出現這個問題的原因,其他答主都有說明。
我的解決方法就是,需要取整(保留精度)的情況,都使用round轉換$num
=round
((0.1
+0.7)*
10);
//第二個引數表示保留精度
$money
=round
((0.1
+0.7)*
10,2);
(int)這種寫法,屬於強制型別轉換,比如從客戶端接收乙個id引數,防止型別錯誤,就可以在接收的時候強制轉換成整數
$id = (int)$_GET['id'];
2樓:
複習IEEE 754標準 & 複習PHP中(int)的作用,然後你就明白了
<?
phpecho
sprintf
("%.32f",(
0.1+
0.7)*10
),"\n"
;echo
sprintf
("%.32f",(
int)((
0.1+
0.7)*10
)),"\n"
;//以上輸出如下
//7.99999999999999911182158029987477
//7.00000000000000000000000000000000
echo
sprintf
("%.32f"
,0.1
+0.7),"
\n";echo
sprintf
("%.32f",(
0.1+
0.7)*10
),"\n"
;//以上輸出如下
//0.79999999999999993338661852249061
//7.99999999999999911182158029987477
是不是很好玩,是不是很有趣
3樓:老虎說
浮點數計算問題跟語言無關,js裡面也會有,c語言也會有,問題出在計算機使用的是二進位制,二進位制表示十進位制小數會變成乙個無限小數
浮點數精度問題(0.1 + 0.3不等於0.4)7.9999999取整不就是7了嗎?可以用ceil函式和floor函式
PHP中的乙個解決方法
$a = new Decimal('0.1');
$b = new Decimal('0.2');
echo $a + $b;
浮點數問題也是為什麼有寫系統下用整數的分為單位來表示錢包的原因
4樓:ired
首先明確一點,原因是浮點數的精度原因導致的,(0.1+0.7)*10 在 PHP 內部的表示其實是類似7.9999999999999991118... 。
Float 浮點型 - Manualvar_dump
((0.1
+0.7)*
10);
// 顯示浮點數 8
原因在 vardump 函式預設並不會顯示全精度的浮點數,所以在除錯的時候建議使用 var_export 函式
var_export
((0.1
+0.7)*
10);
//顯示浮點數 7.999999999999999
或者也可以這樣
ini_set
('precision'
,'-1'
);echo
(0.1
+0.7)*
10;//顯示浮點數 7.999999999999999
phpdbg -n -p 1.php
L1-3 () 1.php - 0x109877000 + 4 ops
L2 #0 INIT_FCALL9634;var_dump"
L2 #1 SEND_VAL8.01
L2 #2 DO_ICALL
L3 #3 RETURN1
var_dump((
int)((
0.1+
0.7)*10
));// 顯示整數 7
phpdbg -n -p 2.php
L1-3 () 2.php - 0x1050680a0 + 5 ops
L2 #0 INIT_FCALL9634;var_dump"
L2 #1 CAST8.00
L2 #2 SEND_VAL01
L2 #3 DO_ICALL
L3 #4 RETURN1
與顯示浮點數 8 不同的是,在 SEND_VAL 之前,先進行了型別轉換 CAST
這裡在將 7.999999999999999 型別強轉為 int,值捨棄小數部分,就是7。
Integer 整型 - Manual
如果想進一步了解更細節的資訊,建議去了解 PHP的原始碼和計算機系統。
5樓:旋轉.HelloWorld
計算精度的問題,下面那一行,內部的計算結果應該是類似 7.99999999999 。所以強制轉換型別之後,就只保留了7。
想要得到高精度的數學計算結果,需要使用bc擴充套件的高精度計算函式。
php問題,為什麼會產生這個值
Shirne 引用變數用完一定要unset foreach arras item unset item 其實第二個迴圈完全沒有意義,迴圈體中 value沒指定引用 只是因為錯誤的用法導致它指向了陣列的末尾元素,所以才起到了修改陣列末尾元素的效果 其它解決方法 如 後面改個變數名 雖然能使當前問題表現...
為什麼會這樣愛情
舉個栗子哈 每個人的選擇不同 之前看過乙個電影 雛妓 在結尾的時候,那些被解救出來的xing工作者,最終還是選擇了回去幹老本行,有的人可能會看不起這些人,有的人認為沒必要是她們太蠢,365行隨便找一行也比這樣好。可是,我們反過來想想,如果真的可以,如果他們有更好的選擇,他們也不會選擇這一行,對於他們...
PHP 為什麼沒有取代 Python ?
飄逸 PHP 和python是兩種不同的語言。它們都是指令碼工具,都是為了更好的解決一些場景的問題而孕育而生的。它們可能會隨著使用的場景消失而消失,比如說 語言基本上就是隨著window 的 VB一樣。 Abby Chau 學乙隻新語言比起用一種不合適的語言來控制非官方API 更省力。Php 還可以...