哪种类型可以节省百分比

HCL*_*HCL 36 .net c#

是否适合使用double类型来存储百分比值(例如商店应用程序中的折扣百分比),或者使用该decimal类型会更好吗?

Jay*_*uzi 35

浮点类型(float以及double特别不适合于金融应用.

财务计算几乎总是十进制,而浮点类型几乎总是二进制.许多易于用十进制表示的常见值无法用二进制表示.例如,0.2d= 0.00110011...b.有关详细讨论,请参见http://en.wikipedia.org/wiki/Binary_numeral_system#Fractions_in_binary.

同样值得一谈的是你如何在系统中代表价格.decimal由于上面列出的原因,它是一个不错的选择,但浮点数不是.因为您相信面向对象编程,所以您将把它换成decimalMoney类型,对吗?Kent Beck的" 测试驱动开发实例"中提供了一个很好的金钱处理方法.

也许您会考虑将百分比表示为整数,然后在每次使用时除以100.但是,你是在和自己的错误(哎呀,我忘了给分)和未来的灵活性(客户想要的百分比1 /十分之,所以去解决每一个/100/1000哎呀,错过了一个- .BUG)

根据您的需要,这将为您提供两个不错的选择.一个是decimal.这对于整个百分比来说都很棒10%,但不是像"今天只有1/3关闭!"这样的事情,因为1/3并不完全代表十进制.你喜欢它,如果在1/3的时候购买3件东西作为一个整数出来,对吗?

另一种是使用Fraction存储integer分子和分母的类型.这允许您表示所有有理数的精确值.要么实现自己的Fraction类型,要么从库中选择一个(搜索互联网).


Gre*_*ill 9

您可以将折扣百分比保存为整数.只需存储10或25或其他什么,当你需要计算出某些东西的价格时:

newprice = price * discount / 100
Run Code Online (Sandbox Code Playgroud)

  • 仅限今天,您可以购买\ int_0 ^ 1 e ^ x dx! (5认同)
  • 有时,商店确实喜欢以更复杂的数量来折扣商品.如果一家商店正在进行"无销售税"销售,他们需要按照任何数量进行折扣,以便在增加销售税之后产生正常价格,如果销售税是9.7%,这将是一个丑陋的 - 寻找折扣百分比. (3认同)
  • @morbo,我担心他们会用不规则的常数或数学表达式来折扣. (2认同)

Mat*_*hen 7

decimal确实是以性能成本来实现的,但它通常值得用于财务用途.它具有低性能(所有数字类型中最差的)的原因是它不直接映射到硬件类型.这意味着它需要在软件中完成更多的工作.

请注意,这不仅仅是尺寸问题. decimal是10的幂的缩放整数,而浮点数和双精度类型是2的幂的缩放.这意味着终止十进制值,如0.1可以使用精确表示decimal,而它们是非终止(并因此舍入)为floatdouble.