|
|
|
ทำไม 2104.305 ถึงใช้ round แล้ว ไม่ปัดเศษขึ้น ขอสอบถามผู้รู้หน่อยน่ะค่ะ ว่า 2104.305 ใช้ round เอาทศนิยม 2 ตำแหน่ง |
|
|
|
|
|
|
|
ไม่รู้ได้ป่าวนะครับเอามาจาก
http://th2.php.net/manual/en/function.round.php#86330
<?php
function roundDigits( $value, $precision=0 )
{
$precisionFactor = ($precision == 0) ? 1 : pow( 10, $precision );
return round( $value * $precisionFactor ) / $precisionFactor;
}
echo round(2104.305,2);
echo '<br>';
echo round(2000.305,2);
echo '<br>';
echo roundDigits(2104.305,3);
echo '<br>';
echo roundDigits(2000.305,3);
|
|
|
|
|
Date :
2009-09-25 10:33:24 |
By :
num |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบง่าๆ แบบกำปั้นทุบเบาะนะครับ (ทุบดินมันเจ็บทุบเบาะดีกว่า ) โครงสร้างของภาษามันต่างกันครับ
|
|
|
|
|
Date :
2009-09-25 12:04:45 |
By :
NanoTHoro |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2009-09-25 13:30:38 |
By :
gummezaka |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รูปเฮียนี่หล่อฉุดๆ
|
|
|
|
|
Date :
2009-09-25 14:16:53 |
By :
plakrim |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เจอข้อผิดพลาดแล้วอ่า
ถ้าจุดทศนิยมไหนที่ลงท้ายด้วย เลข 9 มันจะไม่ปัดขึ้นให้
r(1200.999,2); ผลลัพท์เป็น 1200.1
แต่ที่จริงแล้วต้องเป็น 1201.00
|
|
|
|
|
Date :
2009-09-25 17:00:18 |
By :
Minies3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ แก้แล้ว (รอบ 281) ถ้ามีปัญหาอีกบอกมาอีกนะครับ
<?php
function r($float, $fracCnt=2, $precision=6){
$float = (string)$float;
list($n, $frac) = explode('.', $float);
$n = (int)$n;
$fracPre = substr($frac, 0, $precision);
$fracPre = (int)str_pad($fracPre, $precision, '0');
$fracLim = substr($frac, 0, $fracCnt);
$fracLim = (int)str_pad($fracLim, $precision, '0');
$fracPreLen = strlen($fracPre);
$prefixCnt = 0;
if ($fracPreLen < $precision){
if (!empty($fracPre)){
$prefixCnt = $precision - strlen($fracPre);
if ($prefixCnt > $fracCnt){
$prefixCnt = $fracCnt;
}
}
}
$half = pow(10, ($precision - $fracCnt - 1)) * 5;
$fracLimHalf = $fracLim + $half;
if ($fracPre >= $fracLimHalf){
$fracRound = $fracLimHalf + $half;
if (strlen($fracRound) > $fracPreLen){
if (strlen($fracRound) > $precision){
$n += ($n > 0) ? 1 : -1;
$fracRound = 0;
$prefixCnt = 0;
} else {
$prefixCnt--;
if ($prefixCnt < 0 ){
$prefixCnt = 0;
}
}
}
}
else{
$fracRound = $fracLim;
}
$fracRoundLen = $fracCnt - $prefixCnt;
$fracRound = substr($fracRound, 0, $fracRoundLen);
$fracRound = str_pad($fracRound, $fracRoundLen, '0');
if (0){
echo '<div style="border:solid blue 1px;">';
foreach(array(
'float','n','fracCnt','precision','frac','fracPre',
'fracLim', 'half', 'fracLimHalf',
'fracRound','prefixCnt','fracRoundLen'
) as $var){
echo "<br>$var : " . ($$var);
}
echo '</div>';
}
return ($n . '.' . str_repeat('0',$prefixCnt) . $fracRound);
}
//test case
$pow = 3;
$max = pow(10,$pow);
$fracCnt = 2;
$integer = 100;
for($i=0; $i<$max; $i++){
$ipad = str_pad($i, $pow, '0', STR_PAD_LEFT);
echo "<br>r($integer.$ipad,$fracCnt) ::::: ";
echo r("$integer.$ipad",$fracCnt);
}
$integer = -100;
for($i=0; $i<$max; $i++){
$ipad = str_pad($i, $pow, '0', STR_PAD_LEFT);
echo "<br>r($integer.$ipad,$fracCnt) ::::: ";
echo r("$integer.$ipad",$fracCnt);
}
|
|
|
|
|
Date :
2009-09-25 17:26:28 |
By :
num |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองเอาไปใช้แล้ว ฟังก์ชันนี้ใช้ได้ค่ะ ยังไม่พบข้อผิดพลาด
ขอบคุณอีกครั้งน่ะคร่า ๆๆๆๆๆ ถึงแม้จะตอบช้าไปหน่อย
|
|
|
|
|
Date :
2009-09-28 09:05:45 |
By :
Minies3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อิอิ ตลกดี
|
|
|
|
|
Date :
2009-09-28 10:48:45 |
By :
danya |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2009-10-12 11:44:09 |
By :
apicha31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากกกก สำหรับ โพส์ของคุณ num ผมกำลังตามหามันอยู่พอดี มาเจอแบบนี้ เจ๋งไปเลยครับ ลองใช้ดูแล้วฟังค์ r ที่คุณ num มาโพส์ ยังไม่พบข้อผิดพลาดเช่นกันครับ แต่ว่า อยากให้มันแสดงเครื่องหมาย comma เมื่อตัวเลขเป็นหลักพันขึ้นทำไงคับ
ขอบคุณครับ
|
|
|
|
|
Date :
2010-09-25 22:28:49 |
By :
chamrut |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$a=ค่าที่ได้จากการปัดทศนิยม
เอาค่าที่ได้มา Code (PHP)
explode('.',$a);
จากนั้น ใช้ฟังก์ชั่น Code (PHP)
$b=number_format($a[0]);
แล้วก็นำมาต่อกัน
Code (PHP)
$number=$b.'.'.$a[1];
ประมาณนี้น่ะครับ
แต่ขอยืมฟังก์ชั่น คุณ num ไปใช้บ้างน่ะครับ
|
|
|
|
|
Date :
2010-09-26 00:08:33 |
By :
iieszz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|