Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WxWidgets:简单的数学公式会产生错误的结果? 我非常喜欢WXWIDGET,并从C++编程开始。我的示例程序将摄氏度从文本形式转换为华氏度。这是我的基本代码: //get "100" from textbox wxString szCelsius = TextCtrl1->GetValue(); long lCelsius; //attempt to cast into long szCelsius.ToLong(&lCelsius, 10); //formula that works in normal cases to get fahrenheit long lFahrenheit = ((9.f/5.f) * lCelsius + 32); //SOMEHOW this works: //long lFahrenheit = ((9.f/5.f) * 100 + 32); //display debug info, note it displays lCelsius as 100 wxString debuginfo; debuginfo << _T("deg C: ") << lCelsius << _T("\n"); //displays incorrectly as 211 debuginfo << _T("deg F: ") << lFahrenheit << _T("\n"); //this displays 100 std::cout << lCelsius; //this fails though assert(lCelsius == 100); //从文本框中获取“100” wxString szCelsium=textcrl1->GetValue(); 朗·勒塞尔修斯; //企图陷入长期的困境 托龙(和lCelsius,10),; //在正常情况下可以达到华氏温度的配方 长lFahrenheit=((9.f/5.f)*lCelsius+32); //不知何故,这是可行的: //长lFahrenheit=((9.f/5.f)*100+32); //显示调试信息,注意它将lCelsius显示为100 wxString-debuginfo; debuginfo_C++_C_Compiler Construction_Wxwidgets_Type Conversion - Fatal编程技术网 GetValue(); 朗·勒塞尔修斯; //企图陷入长期的困境 托龙(和lCelsius,10),; //在正常情况下可以达到华氏温度的配方 长lFahrenheit=((9.f/5.f)*lCelsius+32); //不知何故,这是可行的: //长lFahrenheit=((9.f/5.f)*100+32); //显示调试信息,注意它将lCelsius显示为100 wxString-debuginfo; debuginfo,c++,c,compiler-construction,wxwidgets,type-conversion,C++,C,Compiler Construction,Wxwidgets,Type Conversion" /> GetValue(); 朗·勒塞尔修斯; //企图陷入长期的困境 托龙(和lCelsius,10),; //在正常情况下可以达到华氏温度的配方 长lFahrenheit=((9.f/5.f)*lCelsius+32); //不知何故,这是可行的: //长lFahrenheit=((9.f/5.f)*100+32); //显示调试信息,注意它将lCelsius显示为100 wxString-debuginfo; debuginfo,c++,c,compiler-construction,wxwidgets,type-conversion,C++,C,Compiler Construction,Wxwidgets,Type Conversion" />

WxWidgets:简单的数学公式会产生错误的结果? 我非常喜欢WXWIDGET,并从C++编程开始。我的示例程序将摄氏度从文本形式转换为华氏度。这是我的基本代码: //get "100" from textbox wxString szCelsius = TextCtrl1->GetValue(); long lCelsius; //attempt to cast into long szCelsius.ToLong(&lCelsius, 10); //formula that works in normal cases to get fahrenheit long lFahrenheit = ((9.f/5.f) * lCelsius + 32); //SOMEHOW this works: //long lFahrenheit = ((9.f/5.f) * 100 + 32); //display debug info, note it displays lCelsius as 100 wxString debuginfo; debuginfo << _T("deg C: ") << lCelsius << _T("\n"); //displays incorrectly as 211 debuginfo << _T("deg F: ") << lFahrenheit << _T("\n"); //this displays 100 std::cout << lCelsius; //this fails though assert(lCelsius == 100); //从文本框中获取“100” wxString szCelsium=textcrl1->GetValue(); 朗·勒塞尔修斯; //企图陷入长期的困境 托龙(和lCelsius,10),; //在正常情况下可以达到华氏温度的配方 长lFahrenheit=((9.f/5.f)*lCelsius+32); //不知何故,这是可行的: //长lFahrenheit=((9.f/5.f)*100+32); //显示调试信息,注意它将lCelsius显示为100 wxString-debuginfo; debuginfo

WxWidgets:简单的数学公式会产生错误的结果? 我非常喜欢WXWIDGET,并从C++编程开始。我的示例程序将摄氏度从文本形式转换为华氏度。这是我的基本代码: //get "100" from textbox wxString szCelsius = TextCtrl1->GetValue(); long lCelsius; //attempt to cast into long szCelsius.ToLong(&lCelsius, 10); //formula that works in normal cases to get fahrenheit long lFahrenheit = ((9.f/5.f) * lCelsius + 32); //SOMEHOW this works: //long lFahrenheit = ((9.f/5.f) * 100 + 32); //display debug info, note it displays lCelsius as 100 wxString debuginfo; debuginfo << _T("deg C: ") << lCelsius << _T("\n"); //displays incorrectly as 211 debuginfo << _T("deg F: ") << lFahrenheit << _T("\n"); //this displays 100 std::cout << lCelsius; //this fails though assert(lCelsius == 100); //从文本框中获取“100” wxString szCelsium=textcrl1->GetValue(); 朗·勒塞尔修斯; //企图陷入长期的困境 托龙(和lCelsius,10),; //在正常情况下可以达到华氏温度的配方 长lFahrenheit=((9.f/5.f)*lCelsius+32); //不知何故,这是可行的: //长lFahrenheit=((9.f/5.f)*100+32); //显示调试信息,注意它将lCelsius显示为100 wxString-debuginfo; debuginfo,c++,c,compiler-construction,wxwidgets,type-conversion,C++,C,Compiler Construction,Wxwidgets,Type Conversion,您可以尝试在程序集级别对此进行调试,以更详细地了解正在进行的操作 另外,作为一种风格上的建议,主要术语可以写为(9.f/5.f),这样可以去掉演员阵容,更容易阅读 我也质疑为什么你要用long来表示温度,我觉得大多数温度(特别是华氏温度)都在普通int支持的范围内,值1.8(即9/5)不能准确地表示为二进制浮点数-在二进制中,它是一个循环的数字序列(1.11001100…)-类似于1/3在十进制中重复出现的方式 以单精度浮点值表示的最接近值略低于1.8-约为1.79999523)。当这个数字乘以

您可以尝试在程序集级别对此进行调试,以更详细地了解正在进行的操作

另外,作为一种风格上的建议,主要术语可以写为
(9.f/5.f)
,这样可以去掉演员阵容,更容易阅读

我也质疑为什么你要用
long
来表示温度,我觉得大多数温度(特别是华氏温度)都在普通
int
支持的范围内,值1.8(即9/5)不能准确地表示为二进制浮点数-在二进制中,它是一个循环的数字序列(1.11001100…)-类似于1/3在十进制中重复出现的方式

以单精度浮点值表示的最接近值略低于1.8-约为1.79999523)。当这个数字乘以100时,它的值刚好小于180;然后加上32,结果是一个略低于212的数字

将浮点数转换为整数会截断小数部分,因此211.999。。。变成211

如果在源代码中使用文本100而不是运行时提供的值,则不会发生这种情况,因为编译器在编译时将表达式
(9.f/5.f)*100
简化为普通的180

如果编译器支持C99
roundf()
函数(在
math.h
中声明),则可以使用该函数将整数舍入到最接近的整数:

long lFahrenheit = roundf((9.f/5.f) * lCelsius + 32);

szCelsius.ToLong(&lCelsius,10)
return
true
?@Vijay,我运行了一个断言,它通过了,所以它是
true
您使用的编译器是什么?wxWidgets在内部使用strtol,这取决于编译器。@dark_charlie,GCC-4.4.3 Linux使用正确的匈牙利符号:不确定是否有“ToInt”函数,所以我选择了long(在我的平台上与int相同)。我想你指的是在gcc上运行-S或其他什么。。这可能会有点困难,我会看看我能在汇编中挖掘什么。谢谢,这让我对表示有了更多的了解。我以前只知道一些基本的事情。它起作用了,我现在可以安心了:)