2012-10-06 66 views

Trả lời

5

Đây là một cách đơn giản:

printf("%.1f",trunc(x*10.0)/10.0); 
+0

Có lẽ an toàn hơn với '% .1f'. –

+0

@DanielFischer: sửa đổi –

2

này nên làm việc

double d = 4.48; 
d *= 10.; 
int i = d; 
d = (double) i/10.; 
11

Bạn có thể (ab) sử dụng thực tế là sẽ cắt cụt bộ phận nguyên và không tròn:

float original = 4.48; 

int tmp = original * 10; // 44.8 truncated to 44 

float truncated = tmp/10.0; // 4.4 
+0

Để tránh quá trình chuyển đổi 'int', sử dụng' trunc *() 'như được trả lời [ở đây] (https://stackoverflow.com/a/12764022/2410359). Vẫn có thể có vấn đề về cạnh. – chux

1
float myval = 4.48; 
float tr = ((int)(myval*10))/10.0; 
+0

câu trả lời cố định ...... – doron

2

Nếu trình biên dịch của bạn hỗ trợ C99, bạn sẽ có thể sử dụng trunc() và bạn bè:

float f = 4.56f; 
f = truncf(f * 10.0)/10.0; 
+0

Lưu ý rằng '10.0' là một' double' ở đây và do đó, '*' và '/' được thực hiện ít nhất là 'double' precision'. – chux

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