C++ 在std::map中使用double或float作为键

C++ 在std::map中使用double或float作为键,c++,stdmap,C++,Stdmap,我正在尝试使用std::map,其中的是双精度或浮点数,直到小数点后的第三位,我的问题是,当我输入9.20时,系统如何保存双精度数字。一些时间被保存为9.199999,然后查找函数不起作用。有没有办法让它工作,或者仅仅使用整数或字符串作为键?读取使用整数和比例因子(1000)?@PaulR你的意思是int key=mynum*1000?@yaodav是的,9.20应被视为9200,9.205应被视为9205,等等。整数类型准确地表示数字,浮点类型则不准确。但这并不是简单的乘法,你还需要处理不精确

我正在尝试使用std::map,其中的是双精度或浮点数,直到小数点后的第三位,我的问题是,当我输入9.20时,系统如何保存双精度数字。一些时间被保存为9.199999,然后查找函数不起作用。有没有办法让它工作,或者仅仅使用整数或字符串作为键?

读取使用整数和比例因子(1000)?@PaulR你的意思是int key=mynum*1000?@yaodav是的,
9.20
应被视为
9200
9.205
应被视为
9205
,等等。整数类型准确地表示数字,浮点类型则不准确。但这并不是简单的乘法,你还需要处理不精确性,所以你需要更像
key=(mynum+0.0001)*1000
的东西,这样
9.199999
变得更像
9.200099
,然后乘法可以截断末尾未使用的数字。这里要小心一点,@yaodav的意思是与1000相乘,然后转换为最接近的整数。这仍然是可能的。我的建议是使用
std::round(f*1000)
作为键,因为double可以准确地存储所有高达2^52的整数。因此,您将不会有舍入问题。