在C++中,浮点值从双精度截断
In C++ float value being truncated from double
我以前使用浮点变量进行过编码,从未遇到过这个问题。
float a, b, subtotal, stx;
a=15.95;
b=24.95;
subtotal=a+b;
stx=subtotal*.07;
cout << "Item 1: $" << a << endl;
cout << "Item 2: $" << b << endl;
cout << "nSubtotal: $" <<subtotal<< endl;
cout << "Sales Tax: $" << stx << endl;
cout << "Total: $" << subtotal+stx << endl;
相对海峡前向码
warning C4305: '=' : truncation from 'double' to 'float'
我理解数据被截断的想法(我也知道你可以在变量的末尾写f
。但是如果变量被声明为float,为什么编译器会将文本值解释为doubles,如果它被声明为浮点。
我查了其他几张票,它们与我的查询不同。我似乎找不到一个解决方案,说明如果数据被声明为浮动,为什么数据会被读取为双精度。
为什么编译器将文字值解释为双重
因为这就是文字的解释方式,除非您添加修饰符来指定不同的类型。
a=15.95f;
^ gives the literal "float" type
但是如果变量被声明为float。。。
表达式的类型从不取决于该表达式的使用方式;所以无论你用15.95
做什么,它都有double
类型。如果需要,该类型会被转换为在更大的表达式中使用,这就是在这种情况下发出警告的原因。
15.95
无论被分配给什么,都被视为双精度;变量的类型只影响它最终持有的值,而不是你试图分配给它的值。赋值的右侧总是首先求值。
处理组成代码的字符串标记-它看到的是"2.7"或15.95,它是数字(以数字开头)和浮点(有一个。)浮点数字的默认容器是双精度的(否则,您输入的大多数硬编码数字都会得到非常错误的结果。在计算表达式的值(在这种情况下,仅计算值本身)后,它被分配给一个浮点值,该值不够精确,无法存储结果,因此发出警告。
来自标准2.14.4
除非由后缀明确指定,否则浮动文字的类型为双。
(强调矿)
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 在 C++ 中将双精度变量写入二进制文件
- 如何从字符串转换为双精度*
- 为什么我的数组双精度函数不起作用?
- 高精度双精度的 Sprintf 格式化问题
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 将指针数组分配给双精度
- C++如何将字符串逐行转换为双精度
- 长双精度C++是IEEE二进制128的实现吗?