【问题标题】:How can I track the decimal in a float number?如何跟踪浮点数中的小数?
【发布时间】:2011-12-15 10:28:21
【问题描述】:

(首先,我在 Mac 上编写这个程序,但它是用 C++ 编写的)

我正在编写一个处理浮点数的程序;浮动数字将持有不同数量的资金。并且程序将计算资金的几个百分比,这些百分比也将保留为浮点数..
我需要弄清楚如何跟踪这些数字中的小数;原因是:我希望程序自动舍入浮点数。这是因为您没有将钱列为 97.843 美元,您希望它显示为 97.84 美元。

那么,我该怎么做呢?

【问题讨论】:

  • 强烈推荐阅读Why not use double or float to represent currency你只是不想想做你正在做的事。
  • 不要用浮点数来赚钱。
  • 好吧,你推荐我用什么来赚钱?
  • 搜索功能? Best way to store currency values in C 提示:跟踪美分,而不是美元。
  • @James:您使用整数,其中数字 1 代表的不是 1 美元,而是 1 美分,或者 10 美分的小数部分。或者您编写一个在内部执行此操作的类,例如 CLR Decimal 数据类型。

标签: c++ macos command-line


【解决方案1】:

您永远不想四舍五入您的货币价值,除非将它们显示给用户(或报告)。您显然不想存储四舍五入的数字。

输出浮点值时可以使用 C++ 流操作器来改变默认精度,例如:

  std::cout.precision(n);
  std::cout << myFloat; 

示例请参见此处:http://www.fredosaurus.com/notes-cpp/io/omanipulators.html

【讨论】:

  • 亲爱的上帝。您永远不想将浮点数用于任何需要精确性的事情。答案是您只需使用非浮点类型(int、long 等)并跟踪 cents
  • 没错,但发帖人并没有说明这是否是一个问题。我只是在回答所提出的问题。
  • 这些都是非常有效的 cmets。
  • 我不确定告诉别人做错事的正确方法是否有价值。
  • 首先,这不是“错误的做法”。您可以准确地使用双精度数进行简单的货币计算,只要您知道自己在做什么。使用 long double 更好,您需要使用自定义的 double 比较函数,但这不仅是可能的,而且在金融中无处不在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-29
  • 2011-01-18
相关资源
最近更新 更多