静态转换如何在C ++中保持数字的精度?

时间:2016-06-27 01:32:57

标签: c++ c++11

经过很长一段时间没有编程,我正在搞乱C ++,我将在下个月完成一项任务。我发现变量可以溢出的知识:具体来说,float类型变量不会保存与double类型一样多的小数。但是,我尝试了这段代码:

permi() {

    read -p "What is the path of the file? the introduce the name of the file: " dir

    for file in "$dir"/*; do

        echo "New permissions for $file:"
        read -p "[u|g|o] " who
        read -p "[r|w|x] " ans

        chmod "${who}+${ans}" "$file"

    done

}

而且,令我惊讶的是,第一个和最后一个(双t和浮点t)的精度是相同的,而浮点g的精度更低。这对我来说似乎有点直观,static_cast如何保持数字的精确度?

非常感谢。

2 个答案:

答案 0 :(得分:3)

那是因为你没有为任何事情分配static_cast ed值:

#include <iostream>
#include <iomanip>

int main() {
    using namespace std;

    cout << setprecision(20);

    double t(0.1);
    float g(0.1);
    cout << t << endl;
    cout << g << endl;
    g = static_cast<float>(t); // There was no assignment in your code
    cout << g << endl;
}

立即输出:

0.10000000000000000555
0.10000000149011611938
0.10000000149011611938

答案 1 :(得分:3)

你没有改变t的值。

使用以下内容:

 cout << static_cast<float>(t) << endl;

t = static_cast<float>(t);  
  cout << t << endl;