提问人:SADL 提问时间:5/22/2023 最后编辑:Alan BirtlesSADL 更新时间:5/22/2023 访问量:113
在 C++ 中分配浮点数或将其推送到向量中时被舍入 [duplicate]
Floats being rounded in C++ when assign it or push it in a vector [duplicate]
问:
这是我的代码的摘录:
#include <iostream>
#include <nlohmann/json.hpp>
#include <vector>
using nlohmann::json;
void fillJs(json js, std::vector<float>* positions)
{
positions->push_back(js[0]);
positions->push_back(js[1]);
}
float precision(float f, int places)
{
float n = std::pow(10.0f, places);
return std::round(f * n) / n;
}
int main()
{
json js{45652.012222222, 1563.4500001, 5.71235, 20218.9194556};
std::cout << "js [0] = " << js[0] << std::endl;
float yy = js[3];
std::cout << "yy = " << yy << std::endl;
std::cout << "js 2 round 1 = " << precision(js[3], 1) << std::endl;
std::cout << "js 2 round 2 = " << precision(js[3], 2) << std::endl;
std::cout << "js 2 round 3 = " << precision(js[3], 3) << std::endl;
std::vector<float> vec;
vec.push_back(js[0]);
std::cout << "vec 0 = " << vec[0] << std::endl;
std::vector<float> vec1;
fillJs(js, &vec1);
std::cout << "vec 1 = " << vec1[1] << std::endl;
}
这是输出:
js [0] = 45652.012222222
yy = 20218.9
js 2 round 1 = 20218.9
js 2 round 2 = 20218.9
js 2 round 3 = 20218.9
vec 0 = 45652
vec 1 = 1563.45
为什么分配的蚂蚁没有四舍五入的温打印,浮点数是四舍五入的?
我需要在不四舍五入的情况下分配值,有什么想法吗?
答: 暂无答案
上一个:舍入浮点值不保留舍入小数点
评论
float
只精确到大约 7 位数字,即总共 7 位数字,而不是小数点后的数字。打印到超过这个精度基本上是打印噪音。Смотритетакже: 浮点数学坏了吗? - 不完全是重复的,但有必要的背景。js[0]
operator<<
nlohmann::json
double
float
vector<double>