Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Floating point 税率是否需要存储为整数?_Floating Point_Decimal_Currency_Rounding Error - Fatal编程技术网

Floating point 税率是否需要存储为整数?

Floating point 税率是否需要存储为整数?,floating-point,decimal,currency,rounding-error,Floating Point,Decimal,Currency,Rounding Error,我理解,由于舍入误差问题,货币值应该作为整数存储和处理。这对我来说很有意义,我明白了(我想) 但是税率呢?是否有任何原因需要将税率(不是税额、税率,如6.5或8.125)存储为整数而不是小数 如果我将税率存储为整数,那么如何将税率应用于交易中的美元金额?如果以6.5%的税率计算10000*1.065($100.00*1.065),那么将6.5%的税率存储在数据库中的好处是什么?我不相信一个数字乘以或除以100一次是容易出现舍入错误的 我如何存储税率有关系吗?首先,你不应该使用小数。这是因为在需要

我理解,由于舍入误差问题,货币值应该作为整数存储和处理。这对我来说很有意义,我明白了(我想)

但是税率呢?是否有任何原因需要将税率(不是税额、税率,如6.5或8.125)存储为整数而不是小数

如果我将税率存储为整数,那么如何将税率应用于交易中的美元金额?如果以6.5%的税率计算10000*1.065($100.00*1.065),那么将6.5%的税率存储在数据库中的好处是什么?我不相信一个数字乘以或除以100一次是容易出现舍入错误的


我如何存储税率有关系吗?

首先,你不应该使用小数。这是因为在需要精确值的地方不应该使用浮点。不是所有的小数都是浮点;请参阅C#中的十进制数据类型或java中的java.math.BigDecimal

第二,10的幂特别容易受到奇怪的浮点问题的影响,因为浮点运算的实现方式会导致被10的幂除的小数无限重复。看见下面是一个简单的例子:

groovy:000> f = 0.1F // make a floating point number
===> 0.1
groovy:000> f * 100 
===> 10.000000149011612
这是因为0.1的表示形式是一个被截断的重复小数。这里的回答是,f中真正的不是0.1,而是0.10000001490161119384765625

你可以绕过这个继续说下去:

要解决此问题,您需要提供适当的舍入。有了钱,这很容易,因为你知道小数点后多少位是合适的,除非你有70万亿美元,否则你不会得到足够大的舍入误差,你无法修正它

但使用大小数:

groovy:000> d = new BigDecimal("0.1")
===> 0.1
groovy:000> d * 100
===> 10.0

使用定点小数,这样您就可以准确地知道您拥有的数字。如果您的语言没有固定小数(如Javascript),。

浮点运算()会出现问题。如果将税率存储为十进制而不是浮动,并确保公式的结果是十进制精度值,而不是浮动,我不知道会有任何舍入错误。你在什么环境下做这件事?更多信息和用例/示例,可能有人能够提供更多指导。明白了。那么,对于货币,我总是想用固定点数字乘以固定点数字,这是一个完全不同的问题,但我现在完全搞不明白为什么这么多人主张将货币价值存储为“美分”,而不是美元金额,例如,10000而不是100.00。@Jason:差不多。有一篇有趣的文章提出了相反的观点。但是你必须知道你在做什么。@Jason:我不知道上下文是什么,但是在javascript中没有固定的小数点,所以整数更容易。