在 C++ 中,float 值被从 double 中截断
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 为什么编译器解释文字值如果它被声明为浮点数,则作为双打。
我查了其他几张票,它们与我的查询不同我似乎无法找到解决方案,说明如果数据被声明为浮点数,为什么数据被读取为双精度数。
15.95
无论分配给什么,都被视为双精度数;变量的类型只影响它最终持有的值,而不是你试图分配给它的值。赋值的右边总是先求值。
why is the compiler interpreting the literal values as as doubles
因为这就是文字的解释方式,除非您添加修饰符来指定不同的类型。
a=15.95f;
^ gives the literal "float" type
But if variables are declared as float...
表达式的类型从不取决于表达式的使用方式;所以 15.95
的类型是 double
无论你用它做什么。如有必要,类型会转换为在更大的表达式中使用,这就是在这种情况下发出警告的原因。
来自标准 2.14.4
The type of a floating literal is double unless explicitly specified by a suffix.
(强调我的)
处理构成您的代码的字符串标记 - 它看到的是“2.7”或 15.95,它是数字(以数字开头)和浮点数(有一个 .)。浮点数的默认容器是a 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 为什么编译器解释文字值如果它被声明为浮点数,则作为双打。
我查了其他几张票,它们与我的查询不同我似乎无法找到解决方案,说明如果数据被声明为浮点数,为什么数据被读取为双精度数。
15.95
无论分配给什么,都被视为双精度数;变量的类型只影响它最终持有的值,而不是你试图分配给它的值。赋值的右边总是先求值。
why is the compiler interpreting the literal values as as doubles
因为这就是文字的解释方式,除非您添加修饰符来指定不同的类型。
a=15.95f;
^ gives the literal "float" type
But if variables are declared as float...
表达式的类型从不取决于表达式的使用方式;所以 15.95
的类型是 double
无论你用它做什么。如有必要,类型会转换为在更大的表达式中使用,这就是在这种情况下发出警告的原因。
来自标准 2.14.4
The type of a floating literal is double unless explicitly specified by a suffix.
(强调我的)
处理构成您的代码的字符串标记 - 它看到的是“2.7”或 15.95,它是数字(以数字开头)和浮点数(有一个 .)。浮点数的默认容器是a double (否则对于您输入的大多数硬编码数字,您会得到真正错误的结果。 在计算表达式的值(在本例中,只是值本身)后,它被分配给一个浮点值,该值不够精确,无法存储结果,因此出现警告。