【36】C++实战篇——9位精度的double L_Width[4]数组,转换为float数组 LWidth[i] = (float)L_Width[i]后精度为什么只有3位,为何?

1 问题描述

C++ vector<double> L_Width;
float[] LWidth;
LWidth[i] = (float)L_Width[i];

在代码中double型数组转换为float数组,转换后的float数组只精确到了小数点后3位,为什么?,
那么怎么控制转换后的宽度呢? 我想精确到小数点后5位

    vector<double> L_Width;
	for (int i = 0; i < L_Width.size(); i++)
	{
		LWidth[i] = (float)L_Width[i];
		cout << "cam1:" << LWidth[i] << endl;
	}

进过调试发现vector L_Width中数据依次为:

L_Width[0]=0.882000029,
L_Width[1]=0.867999971,		
L_Width[2]=0.889999986,		
LWidth[3]=0.833999991

而 float[] LWidth数据依次为:

0.882,0.868,0.89,0.834

2 问题分析 及 解决

在C++中,可以使用std::setprecision()来控制浮点数的输出精度。但是, 对于类型转换操作,你无法直接控制转换后的精度。转换操作会根据目标类型的规则来执行,通常情况下,会按照C++中float类型的默认精度进行截断

如果你需要将double类型转换为float类型并且控制精度,可以手动进行四舍五入或者截断操作。下面是一个简单的示例,演示了如何将double类型的数据转换为float类型,并控制精度到小数点后5位:

#include <iostream>
#include <iomanip>
#include <cmath> // 包含round函数的头文件

int main() {
    // 假设有一个 double 类型的数组 L_Width
    std::vector<double> L_Width = {3.1415926535, 2.7182818284, 1.6180339887};

    // 创建一个 float 类型的数组,用于存储转换后的数据
    std::vector<float> LWidth_float(L_Width.size());

    // 手动进行精度控制
    for (size_t i = 0; i < L_Width.size(); ++i) {
        // 将 double 类型数据转换为 float 类型并控制精度到小数点后5位
        LWidth_float[i] = static_cast<float>(std::round(L_Width[i] * 100000.0) / 100000.0);
    }

    // 输出转换后的结果
    for (size_t i = 0; i < LWidth_float.size(); ++i) {
        std::cout << std::fixed << std::setprecision(5) << LWidth_float[i] << std::endl;
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-G-B

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值