我已经在这一个敲我的脑袋整天。 C ++的项目,我目前的工作能够显示的可编辑值的要求。当前选择的数字显示增加的值的上方和下方用于所述数字递减的值。它是能够引用编辑值既是一个数字和数字采集有用的。什么是真棒是,如果有一个浮点数的一些可转位形式,但我一直无法找到这样的解决方案。我抛出这个问题在那里,看看是否有什么明显的我失踪或者我应该推出自己的。


谢谢你的建议!我希望这不会从浮点转换的解决方案 - >字符串 - > INT,但我的认为的是摆脱浮点量化问题远的最佳途径。我结束了升压::格式打算,只是引用字符串的单个字符。我看不出与使用MODF和FMOD的组合,试图得到一个数字出来一个浮动的,作为一个巨大的性能差异(这可能不只是在幕后,只比我的实现更有力)。

有帮助吗?

解决方案

的浮点数字的内部表达不像是你看到。您只能转换为stirng。

要铸造,操作如下:

char string[99];
sprintf(string,"%f",floatValue);

或者看到这一点: HTTP:// www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.1

在维基百科文章可以解释更多的表示: http://en.wikipedia.org/wiki/ Floating_point

其他提示

哦,有许多方法来转换为字符串。(虽然我喜欢小号<强>名词 printf()的自己。)

或者你可以转换为int和拉出的数字与模数和整数除法。可以使用日志{base10}计数的位数。

(记住:登录{baseA} _X /日志{baseA} _B =日志{baseB} _X)

示例:

#define SHOW(X) cout << # X " = " << (X) << endl

int
main()
{
  double d = 1234.567;

  SHOW( (int(d)%10000) / 1000 );
  SHOW( (int(d)%1000)  / 100  );
  SHOW( (int(d)%100)   / 10   );
  SHOW( (int(d)%10)           );
  SHOW( (int(d*10)  % 10)     );
  SHOW( (int(d*100) % 10)     );
  SHOW( (int(d*1000)% 10)     );

  SHOW( log(d)/log(10) );
}

虽然你应该使用的static_cast ...

当心指数表示法。有了一个非常大的或非常小的数字,你可能有问题。

浮点数也有可能会引起你一些悲痛四舍五入问题。 (这是同样的原因,我们不使用==操作符两个双打之间,或者为什么你不能依靠A * B = = b *的一个。根据A和B的精确值,它们很可能略有不同出大约10 ^ -25)

您可以串之间进行转换和浮动只能通过使用boost :: lexical_cast的。但是,你不能直接索引浮动形式 - 它没有内部存储为十进制数字。这可能不是个大问题。为了您的UI,你很可能会保持数字的字符串形式,无论如何,与转换,并从漂浮在的getter / setter。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top