tỷ lệ phần trăm của bạn không phải là thực 0,05. Đó là một giá trị đóng thành 0,05 ... và có thể nhiều hơn một chút so với 0,05. Vì vậy, khi nó được nhân với 2600, bạn đang nhận được một giá trị chỉ hơn 130.0 ... mà sau đó được "trần" để 131.0.
Sử dụng một công cụ nhỏ tôi đã viết cách đây một thời gian (có sẵn từ this page về các loại điểm nổi nhị phân .NET) có vẻ như giá trị thực tế là float
gần 0,05 nhất là 0,0500000007450580596923828125. Để tăng gấp đôi, đó là 0,05000000000000000277555756156289135105907917022705078125.
Đạo đức của câu chuyện: không sử dụng float
cho loại điều này - sử dụng decimal
. Hoặc nếu bạn chỉ đang cố gắng đại diện cho một tỷ lệ phần trăm, nếu nó là okay để thực sự chỉ chính xác đến một phần trăm, sử dụng một giá trị số nguyên 0-100.
Nguồn
2010-07-01 14:24:42
Tôi không hiểu câu hỏi của bạn, nhưng hãy chắc chắn rằng Math.Ceiling() muốn tham số thập phân hoặc đôi –
Sự cố ở đây là gì? processingFee bằng với 131, có vẻ ổn. –
@Serkan - Math.Ceiling chấp nhận cả số thập phân và số double. – GenericTypeTea