好的,所以我知道有很多文章说明我不应该使用DOUBLE在MySQL数据库上存储资金,否则我将遇到棘手的精度错误。关键是我不是在设计新数据库,而是在寻找一种方法来优化现有系统。较新的版本包含783个DOUBLE类型的列,其中大多数用于存储金额或用于计算金额的公式。
因此,我对此主题的第一意见是,我强烈建议在下一个版本中将DOUBLE转换为DECIMAL,因为MySQL文档和所有人都这么说。但是由于以下三个原因,我找不到合适的论据来证明这一建议:
即使通过对18毫米行表执行运算(例如SUM和复杂的乘法),我也无法执行缺乏精度的错误。而且我们实际上并没有在生产中做这种事情。我可以通过执行类似的操作来显示丢失的精度
SELECT columnName * 1.000000000000000 FROM tableName;
但是我想不出一种方法来将它转换为错误的小数点后两位数字。我在互联网上发现的大多数实际问题是2005年和更早的论坛条目,我无法在5.0.51
MySQL服务器上重现它们中的任何一个。
因此,只要我们不执行我们不打算执行的任何SQL算术运算,那么仅在DOUBLE列中存储和取回金额是否会有任何问题吗?
其实是完全不同的。DOUBLE会导致舍入问题。如果你做这样的事情,0.1 + 0.2
它就会给你类似的东西0.30000000000000004
。我个人不相信使用浮点数学的财务数据。影响可能很小,但谁知道呢。我宁愿拥有我所知道的可靠数据,也不愿获得近似数据,尤其是在处理货币价值时。
问题内容: 我在格式化双精度小数时遇到一些问题。如果我有一个双精度值,例如4.0,我该如何格式化小数位使其改为4.00? 问题答案: 一种方法是使用NumberFormat。
我在格式化双精度小数时遇到了一些问题。如果我有一个双精度值,例如4.0,我如何设置小数的格式,使其变为4.00?
本文向大家介绍C#浮点,双精度,十进制,包括了C#浮点,双精度,十进制的使用技巧和注意事项,需要的朋友参考一下 示例 浮动 float是.NET数据类型的别名System.Single。它允许存储IEEE 754单精度浮点数。存在此数据类型mscorlib.dll,每个C#项目在创建它们时都会隐式引用该数据类型。 大致范围:-3.4×10 38至3.4×10 38 十进制精度:6-9个有效数字 记
问题内容: 如何确定整数位数和Java中类似数字的小数点后位数。 问题答案: 双精度并不总是精确的表示形式。您只能说如果将其转换为字符串,将有多少个小数位。 这仅适用于未转换为指数符号的数字。您可能会认为1.0小数点后一位或无位。
我正在尝试将十六进制数据添加到十六进制字符串中,我需要使用它们的IEEE表示将浮点数添加到该字符串中。对于整数,这很简单: 其中value是数字的VARCHAR,params是包含十六进制字符串的VARCHAR。这个技巧适用于整数,但对于十进制,它会截断十进制部分,并将整数部分转换为十六进制整数。如果十进制的大小是固定的(java float或double),如何将值转换为十进制数的IEEE浮点表
问题内容: 我正在寻找一种优雅的方法(就语法而言,不一定有效)来获取小数范围的频率分布。 例如,我有一个带有“评分”列的表,该列可以是负数也可以是正数。我想获得具有一定范围等级的行的频率。-…-[-140.00至-130.00):5-[-130.00至-120.00):2-[-120.00至-110.00):1-…-[120.00至130.00):17-依此类推。 [i到j]表示i包含到j排除。