我在C ++中遇到了这个带有数字的问题:
给出两个数字:
numb1 = 0.000171438
numb2 = 11666;
如果我这样做
fillweight= float(numb1 * numb2)
我得到答案“1”,而如果我这样做
fillweight = 0.000171438 * 11666
我在屏幕上正确地得到了“1.9999”答案 - 传递花车有什么问题?我也试过像
这样的东西fillweight = float(float(numb1) * float(numb2))
但他们总是一样的答案。
答案 0 :(得分:2)
在
fillweight = 0.000171438 * 11666
第一个数字是double
常量,乘法使用双精度算术完成(11666将转换为double
)这可能在编译时发生。
fillweight = 0.000171438f * 11666f
与
相同fillweight = float(float(numb1) * float(numb2))
如果numb1和numb2是float
s。
虽然这不能解决您的问题。但是,如果没有最小的工作示例,除了要注意你的类型之外没有什么可说的。
答案 1 :(得分:0)
浮动的可用精度明显低于双打 - 在"工作的时候#34;文字被解释为双打。
有很多关于此的信息可以在这里找到:
仔细检查浮子可以容纳的东西 - 这种差异可能不是导致你的问题的原因。我敢打赌,问题在于您尝试保存结果的变量可能是int
或其他一些不适合的类型,用于执行乘法。
答案 2 :(得分:0)
您可能会在输出方法中看到舍入。例如,请使用以下代码:
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
std::cout.precision(5);
std::cout << "Precision(5)" << std::endl;
{
float numb1 = 0.000171438;
float numb2 = 11666;
float fillweight = float(numb1 * numb2);
std::cout << "Test #1: fillweight = " << fillweight << " numb1 = " << numb1 << " numb2 = " << numb2 << std::endl;
}
{
float numb1 = 0.000171438;
float numb2 = 9999;
float fillweight = float(numb1 * numb2);
std::cout << "Test #2: fillweight = " << fillweight << " numb1 = " << numb1 << " numb2 = " << numb2 << std::endl;
}
std::cout.precision(10);
std::cout << "Precision(10)" << std::endl;
{
float numb1 = 0.000171438;
float numb2 = 11666;
float fillweight = float(numb1 * numb2);
std::cout << "Test #3: fillweight = " << fillweight << " numb1 = " << numb1 << " numb2 = " << numb2 << std::endl;
}
{
float numb1 = 0.000171438;
float numb2 = 9999;
float fillweight = float(numb1 * numb2);
std::cout << "Test #4: fillweight = " << fillweight << " numb1 = " << numb1 << " numb2 = " << numb2 << std::endl;
}
int i;
std::cin >> i;
return 0;
}
你会得到这个输出:
Precision(5)
Test #1: fillweight = 2 numb1 = 0.00017144 numb2 = 11666
Test #2: fillweight = 1.7142 numb1 = 0.00017144 numb2 = 9999
Precision(10)
Test #3: fillweight = 1.999995708 numb1 = 0.0001714380051 numb2 = 11666
Test #4: fillweight = 1.714208603 numb1 = 0.0001714380051 numb2 = 9999