2011-06-21 62 views
2

現在,我將數字作爲double(11,3)存儲在數據庫中。其中一些數字可能會有較大的負面影響。在一個我與玩現在的問題是-3000.000number_format和負數的問題

當我使用number_format上只是3000.000返回3000 當我使用number_format上-3000.000返回-3

任何想法,爲什麼這種情況正在發生什麼我可以解決它嗎?至於爲什麼會發生這種情況,我現在有點不知所措。

感謝,

傑夫

編輯:我把它用下面的代碼工作:

$number = abs($row['Amount']) * -1; $final = number_format($number,2); 

現在爲什麼會工作,而不是:

$final = number_format($row['Amount'],2); 

我沒有得到任何線索,但至少我找到了一個解決方案,感謝您的幫助:)

+1

這'PHP -R '回聲number_format(-3000.000);'''返回-3,000'。你能否確認數據庫正在發送正確的信息? – cwallenpoole

+0

哪個DBMS?某些數據庫的某些PHP版本中存在一些錯誤 - PHP無法正確檢索某些數值。 –

+0

MySQL版本5.1.13 – jefffan24

回答

2

試試這個:

if($input<0){ 
    $number = abs($input); 
    $result = number_format($number) * -1; 
}else { 
    $result = number_format($input); 
} 
+0

即使這樣,我仍然得到3:echo number_format(3000.000,2)* -1;我不明白會發生什麼...... – jefffan24

+0

請參閱@salathe。您正在接受一個字符串並將其乘以-1。 ''3,000''中的逗號將導致數學運算爲'3 * -1'。 –

+1

建議的代碼將不**工作,因爲'「3,000.00」* -1'會導致字符串在乘法之前變爲juggled(到'3')。 – salathe

1

首先確保您的號碼被提取爲-3000從數據庫。否則以前的答案和評論是好的。

+0

是的,這就是我來到這裏的原因。我有點Shameer的版本工作,仍然是一個錯誤來解決。 – jefffan24

2

來自number_format(-3000.000, 2)的結果是字符串,"-3,000.00"

如果您沒有得到,請使用能夠重現問題的代碼更新問題。

0

根據Shameer的建議,我來到了這個解決方案。負值

尾隨零將被返回(可能如預期):

if($input < 0){ 
    return number_format(0-abs($input), 2, ',', ''); 
} 
else { 
    return number_format((float)$input, 2, ',', ''); 
}