经过很长一段时间没有编程,我正在搞乱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如何保持数字的精确度?
非常感谢。
答案 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;