在 C++ 中分配浮点数或将其推送到向量中时被舍入 [duplicate]

Floats being rounded in C++ when assign it or push it in a vector [duplicate]

提问人:SADL 提问时间:5/22/2023 最后编辑:Alan BirtlesSADL 更新时间:5/22/2023 访问量:113

问:

这是我的代码的摘录:

#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

为什么分配的蚂蚁没有四舍五入的温打印,浮点数是四舍五入的?

我需要在不四舍五入的情况下分配值,有什么想法吗?

C++ 浮点 舍入 精度

评论

1赞 Richard Critten 5/22/2023
float只精确到大约 7 位数字,即总共 7 位数字,而不是小数点后的数字。打印到超过这个精度基本上是打印噪音。Смотритетакже: 浮点数学坏了吗? - 不完全是重复的,但有必要的背景。
0赞 463035818_is_not_an_ai 5/22/2023
你期望什么输出?“不圆润的温打印”是什么意思?
2赞 Marek R 5/22/2023
什么是类型?该类型有什么作用?js[0]operator<<
2赞 molbdnilo 5/22/2023
中的默认浮点类型是 ,而不是 。打印浮点数的默认精度为六位有效数字。nlohmann::jsondoublefloat
1赞 john 5/22/2023
@SADL 您应该将向量更改为vector<double>

答: 暂无答案