说我有:
55.3 and want 55
55.6 and want 56
81.1 and want 81
etc.
我一直在尝试使用round()
函数,但它似乎一直给我所有小数位的最高值。
答案 0 :(得分:3)
OP尚未发布失败的代码。某些OP编码错误。
在转换为round()
之前,使用double
是 正确的方法来舍入int
。当然它必须在范围内。
#include <math.h>
#include <assert.h>
int round_to_int(double x) {
x = round(x);
assert(x >= INT_MIN);
assert(x < (INT_MAX/2 + 1)*2.0);
return (int) x;
}
有关assert()
的详细信息,请参阅How to test for lossless double / integer conversion?。
为什么不使用(int)(x + 0.5);
?
1)否定数字失败。
2)由于double
可能会小于0.5
,x + 0.5
可能会失败,因为1.0
可能会转到int
。
3)当double
的精度超过x+0.5
时,最低有效位为0.5或1.0的值,#~~~~~DOWNLOAD~~~~~#
elif nextCommand.find("DL") == 0 or nextCommand.find("dl") == 0:
sendPath = nextCommand[3:]
print "Attempting download using filepath as: " , sendPath
fileInfo = s.recv(1024)
print "Download Request Acknowledged from server" # , fileInfo
if fileInfo.find("Error") == 0:
print "Error Opening File"
else:
if fileInfo:
fL = fileInfo.split("|")
dlPath = fL[0]
fileSize = fL[1]
f = open(dlPath, 'wb+') #Download Target Path
print "Saving file as:" , f.name
print "Recieved File Size as:" , fileSize
fSize = int(fileSize)
fileContent = s.recv(fSize)
f.write(fileContent)
print "Download Complete"
f.close()
可能舍入到下一个整数
4)简单,没有范围检查。
答案 1 :(得分:2)
过去我们常说int the_int = (int)(some_double + 0.5);
(显然要注意你是否也在处理负值)。
答案 2 :(得分:1)
将幅度增加一半并截断:
int round_up_or_down(double x)
{
return x > 0 ? x + 0.5 : x - 0.5;
}
这统一分配实际间隔:
[-1.5, -0.5) => -1
[-0.5, +0.5) => 0
[+0.5, +1.5) -> +1