2013-03-26 92 views

Trả lời

12

Nó cùng một logic, câu hỏi tương tự đã được thực hiện cho C#

result = round(value*2)/2; 

Và để khái quát, theo aardvarkk 's gợi ý, nếu bạn muốn làm tròn đến độ chính xác gần acc, ví dụ acc = 0.5:

acc = 0.5; 
result = round(value/acc)*acc; 
+1

Điều này mang lại câu trả lời đúng - tôi không có! Tôi sẽ xóa tên của tôi, nhưng tôi khuyên bạn nên khái quát kết quả (nghĩa là nếu chúng ta muốn làm tròn đến 0,05 gần nhất ...) – aardvarkk

+0

vâng, tôi đã thực sự gõ nhận xét cho câu trả lời của bạn, tôi sẽ chỉnh sửa. –

3

Nếu bạn đi nhân với 2 vòng - chia cho 2 tuyến đường, bạn có thể gặp một số lỗi số rất nhỏ (rất nhỏ). Bạn có thể làm điều đó bằng mod để tránh điều này:

x = 16.625; 
dist = mod(x, 0.5); 
floorVal = x - dist; 
newVal = floorVal; 
if dist >= 0.25, newVal = newVal + 0.5; end 

Bạn có thể làm điều đó trong bước ít hơn, nhưng ở đây tôi đã phá vỡ nó lên để bạn có thể xem những gì từng bước thực hiện.

1
a=16.625; 
b=floor(a); 
if abs(a-b-0.5) <= 0.25 
    a=b+.5; 
else 
    if a-b-0.5 < 0 
    a=b; 
    else 
    a=b+1; 
    end 
end 
Các vấn đề liên quan