2009-09-15 21 views
5
<cfset number1 = 20.5/80 * 100 /> 
<cfset number2 = 18.125 /> 
<cfset number3 = 6.875 /> 

<cfoutput> 
DecimalFormat(#number1#): #DecimalFormat(number1)#<br /> 
DecimalFormat(#number2#): #DecimalFormat(number2)#<br /> 
DecimalFormat(#number3#): #DecimalFormat(number3)# 
</cfoutput> 

ĐẦU RA:Điều gì xảy ra với hàm DecimalFormat() của ColdFusion? Làm thế nào để tôi có được kết quả chính xác?

DecimalFormat (25,625): 25,62

DecimalFormat (18,125): 18,13

DecimalFormat (6,875): 6,88

hơn là outputing:

D ecimalFormat (25,625): 25,63

DecimalFormat (18,125): 18.13

DecimalFormat (6,875): 6,88

Dường như một biến mà là kết quả của một phép tính toán học làm cho DecimalFormat() hành xử khác nhau. Bất kỳ sửa chữa nhanh chóng, mà không đào sâu vào java?

+0

cũng vậy, NumberFormat (number1, ".__") cũng làm như vậy. – Jayson

Trả lời

4

Tôi nghĩ vấn đề không phải là DecimalFormat(), nhưng dấu chấm động lỗi làm tròn điển hình.

xem: PrecisionEvaluate()

+0

Không được có bất kỳ lỗi dấu phẩy động nào, tất cả các số này có thể được biểu thị chính xác dưới dạng số dấu phẩy động cơ số 2. (0.625 = 5/8, 0.125 = 1/8, 0.875 = 7/8. Vì 8 là lũy thừa của 2, sẽ không có lỗi vòng tròn.) Tôi giả sử một 'double' hoặc' float' được sử dụng trong bao gồm ... – Kip

+0

nói rằng, tôi không thể nghĩ ra bất kỳ lý do nào cho kết quả anh ta thấy – Kip

+0

number1 = PrecisionEvaluate (20.5/80 * 100) sẽ giúp bạn 25.62500000000000000000 -> 25.63 – Henry

2

DecimalFormat là một hàm định dạng. Không phải là một hàm Toán học. Công việc của nó không phải là làm tròn số của bạn cho bạn, tiếc là CF thiếu các hàm toán học tốt cho số thập phân, do đó bạn sẽ phải viết số của riêng bạn.

Dưới đây là một ai đó đã viết trên trang CF livedocs cho tròn():

<cffunction name="roundDecimal" returntype="numeric"> 
    <cfargument name="num" type="numeric" required="yes"> 
    <cfargument name="decimal" type="numeric" default="2" required="no"> 

    <cfreturn round(num*10^decimal)/10^decimal /> 
    </cffunction> 
+0

Đúng, đó là một chức năng định dạng và tôi đã sử dụng nó cho đầu ra, nhưng cần nó để hoạt động liên tục trên các giá trị cho dù được tính hay không. Nhưng, giải pháp tốt nếu bạn cần làm tròn số cho các phương tiện khác ... – Jayson

-1

hãy xem tài liệu CF NumberFormat và thực hiện tìm kiếm trang trên vòng để xem một số thông tin cụ thể.

0

Sửa chữa nhanh sẽ thay đổi dòng 1 thành number1 = NumberFormat(20.5/80 * 100,'9.999')

Các vấn đề liên quan