2012-04-07 40 views
16

Tôi cần lấy phần thập phân ra khỏi số phao, ví dụ:Lấy phần thập phân ra khỏi số phao

float x = 18.30;

tôi cần một cách để có được những' .30' trong phao khác .. vì vậy tôi sẽ có một phao tương đương với 18,30 và một số khác tương đương với 0,30

Bất kỳ ý tưởng?

+2

nào bạn muốn fmod (18.30, 1.0)? – gbulmer

+1

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. –

+1

@giao diện tốt, fmodf .... – lnafziger

Trả lời

20

Tôi không chắc chắn nếu có một chức năng làm chính xác theo cách bạn muốn nhưng bạn có thể sử dụng này:

x - floor(x) 
+0

Lưu ý rằng điều này có thể là, hoặc không phải những gì bạn mong đợi cho x = - 18.3 –

1

Có một gia đình của các chức năng fmod, ví dụ fmod (18.30, 1.0), fmodf (18.30, 1.0), vv

#include <stdio.h> 
#include <math.h> 

int main (int argc, const char * argv[]) { 
    // insert code here... 
    printf("%f\n", fmod(18.30, 1.0)); 
    return 0; 
} 
8

Chức năng modf() thực hiện điều này trực tiếp hơn fmodf().

+0

Doh! Bộ não cũ nghèo của tôi :-) – gbulmer

17

Câu trả lời được chấp nhận ở trên (x - tầng (x)) hoạt động với số dương nhưng không phù hợp với số âm. Sử dụng trunc() thay vì:

x - trunc(x) 

Nhưng fmod() Giải pháp là một trong những sử dụng nếu bạn hỏi tôi:

fmod(x, 1) 
0

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 
0

x = 3.5

y = parseInt (3.5)

fraction_part = (x-y);

0

Cách tốt nhất mà tôi tìm thấy bằng cách sử dụng các loại biến Objective-C là như sau:

CGFloat floatingPointNumber = 18.30; 
NSInteger integerNumber = floatingPointNumber; 
CGFloat floatingPointNumberWithoutTheInteger = floatingPointNumber - integerNumber; 

Sau đây là kết quả khi thực hiện:

enter image description here

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