Lưu ý: sử dụng modf hoặc fmod như đề xuất trong câu trả lời khác.
Nhưng đừng mong đợi có chính xác cùng một số như atof ("0,30") - như yêu cầu bằng của bạn cho thấy. Thật vậy, nó xảy ra rằng atof ("18.30") là phao gần nhất với atof ("18.0") + atof ("0.30"), nhưng thao tác này là không chính xác, nó có lỗi làm tròn, như bất kỳ tổng của atof ("0,30") với số nguyên> 0.
Vì vậy, khi bạn trừ lại phần nguyên, không có lý do nào để tìm thấy atof ("0,30") trở lại, bạn chỉ tìm thấy thứ gì đó gần atof ("0,30 ").
Expressed trong Squeak/Pharo Smalltalk (độ chính xác kép sử dụng ở đây)
(1 to: 100) count: [:i | 0.3 + i = (3/10+i) asFloat].
cho
-> 100
Nhưng:
(1 to: 100) count: [:i | (3/10+i) asFloat - i = 0.3].
cho
-> 0
Nguồn
2013-06-07 21:08:33
nào bạn muốn fmod (18.30, 1.0)? – gbulmer
Hoặc đơn giản là 'y1 = (int) x; y2 = x - y1; ', mặc dù nó bị ticklish với số âm, tùy thuộc vào ý định của bạn. –
@giao diện tốt, fmodf .... – lnafziger