double 转换int 要四舍五入的 c语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了double 转换int 要四舍五入的 c语言相关的知识,希望对你有一定的参考价值。

如何才能不四舍五入 , 有人说用(int)(x < 0 ? x - 0.5 : x + 0.5)这个
有点不明白 请解释一下

一个double型的数强制转换后 就把小数点后去了 这个相当于if(x<0) x=x-0.5;else x=x+0.5;
如果是负数的话-0.9强制转换为 -0.0 所以要减0.5 整数的话 0.9 也是强制转换为0 但是如果加0.5 就能强制转化为1了 不知楼主明白没有
参考技术A 如果x>0的话,即正数。
x+0.5,如果x小数部分超过或等于0.5的话,这一加,势必会往整数上进位。
如果小于0.5,加完没有进位。
(int)强制转换是只取整数部分的。

同样x<0的情况也可以由x-0.5来取。

c++中的一些计算的问题

要实现小数的四舍五入, 

float a = 3.456; //保留到小数点后两位
float b =(int)((a * 100) + 0.5) / 100.0;

但是这样对负数不好使, 对负数的话, 这个帖子里还有办法: [C] C语言如何实现浮点数的四舍五入?

 

int, float, double 与QString的转化: Qt中 int ,float ,double转换为QString

 

QString与string的相互转换:

1、QString与int相互转换

QString qstr = QString::number(123);

int i = atoi(qstr.toStdString().c_str());

也可以这样:int i = atoi(qstr.ascii());

2、QString与string,即std::string

string s = qstr.toStdString();

QString qstr2 = QString::fromStdString(s);

 

 

 

关于保留几位小数并转化成字符串的几种办法:

1) 要包含 <stdlib.h>

//    Trans = (int(Trans*10+0.5))/10.0;  //四舍五入
//    char buffer[20];
//    gcvt(Trans, 15, buffer);      //把浮点数转换成字符串

//    timeOutput->setText(buffer);        //最大燃烧时间:[s]

//    double Ll = int(Rcpp::as<double>(m_R["Ll"])*100+0.5)/100.0;//(int(Rcpp::as<double>(m_R["Ll"]))*100)/100.0;      //四舍五入
//    double Xit1 = int(Rcpp::as<double>(m_R["Xit1"])*100+0.5)/100.0; //(int(Rcpp::as<double>(m_R["Xit1"]))*100)/100.00;
//    double De = int(Rcpp::as<double>(m_R["De"])*10+0.5)/10.0;//int(Rcpp::as<double>(m_R["De"]))*10/10.0;

//gcvt(Xit1,15,buffer);

  2) 

QString PoolFire::Round(double data, int prec){
    std::stringstream ss;
    ss<<std::fixed<<std::setprecision(prec)<<data;
    std::string s = ss.str();
    return QString::fromStdString(s);
}

//使用
    LOutput->setText(Round(Ll,2));         //火焰长度L:[m]
    D2Output->setText(Round(Xit1,2));          //火焰倾角r:[°]
    rOutput->setText(Round(De,1));           //火焰后拖量D‘:[m]

  

以上是关于double 转换int 要四舍五入的 c语言的主要内容,如果未能解决你的问题,请参考以下文章

c语言中浮点数四舍五入 。 保留一个浮点数小数点后的6位,第3位要四舍五入。如 1.1234.567到1234.570000

C++中double float 这之类的类型转换为int 是四舍五入还是直接舍去小数部分 进一?

C语言编写程序,对一个double型数据进行四舍五入,要求保留两位有效小数,求算法。

c++中的一些计算的问题

写一段简单的c语言程序: 输入一个double类型的数,使它保留小数点后两位,对第三位四舍五入处理

怎样用java实现小数的四舍五入?