问题标签 [decimal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
12434 浏览

python - python十进制比较

python十进制比较

我期待它能够正确转换 2.0,但是在阅读PEP 327之后,我明白有一些原因不会将浮点数隐式转换为十进制,但在这种情况下它不应该像在这种情况下那样引发 TypeError

所有其他运算符也是如此 / - % // 等等

所以我的问题是

  1. 这是正确的行为吗?(不要在 cmp 中引发异常)
  2. 如果我派生自己的类并正确使用浮点转换器,基本上是 Decimal(repr(float_value)),有什么注意事项吗?我的用例只涉及价格比较

系统详细信息:Ubuntu 8.04.1 上的 Python 2.5.2

0 投票
2 回答
6057 浏览

php - PHP/MySQL:最佳货币操作/存储实践?

所以,我打算做一个处理钱的应用程序(PHP/MySQL),我正在考虑如何存储和操作钱,参考PHP浮点数据类型和MySQL十进制。

我在想两个选择。其中之一是以整数美分格式($dollars * 100)操作和存储货币,以便不处理浮点不精确并将其也作为整数存储在数据库中。另一种是以十进制形式存储在 DB 中,并在 PHP 中使用 BC Math 进行计算。

所以我整晚都在谷歌上搜索哪个是最好的选择,但没有找到明确的答案。我见过的唯一合理的选择是整数美分(我不太喜欢,因为它意味着在浏览器中的每次显示之前和存储在数据库中之前从美元转换为美分,反之亦然)。

此外,人们抱怨 MySQL 小数(MySQL 将小数存储为字符串,将它们操作为浮点数等),但那是旧帖子。根据 MySQL 文档,当前版本正确处理小数,唯一的抱怨是它截断了超过声明的小数长度的值的小数部分(例如,如果您将值 12.326 存储在声明为小数的列中(9,2)) ,但根据我的调查,它会舍入它而不是截断(12.326 变为 12.33),这在我看来是正确的。

而且,我没有找到任何关于将钱存储为小数并使用 PHP BCMath 进行计算的建议,在我看来,这是因为很少有人知道 BC 和 GMP 数学函数。

那么,考虑到精度、速度(BCMath 计算速度、MySQL 十进制速度与整数)和编程舒适度,最好的选择是什么?

0 投票
15 回答
64000 浏览

c++ - C/C++ 计算小数位数?

假设来自用户的输入是十进制数,例如。5. 2155(有 4 个十进制数字)。它可以自由存储(int,double)等。

是否有任何聪明(或非常简单)的方法来找出数字有多少位小数?(有点像你如何通过屏蔽最后一位来发现一个数字是偶数还是奇数的问题)。

0 投票
4 回答
24162 浏览

c# - 为什么我不能将 int 拆箱为小数?

我有一个IDataRecord reader我正在检索一个小数,如下所示:

由于某种原因,这会引发一个无效的转换异常,指出“指定的转换无效”。

当我这样做reader[0].GetType()时,它告诉我它是一个 Int32。据我所知,这应该不是问题......

我已经通过这个片段测试了这一点,效果很好。

这让我摸不着头脑,想知道为什么它无法将阅读器中包含的 int 拆箱为小数。

有谁知道为什么会发生这种情况?我错过了什么微妙的东西吗?

0 投票
8 回答
256371 浏览

python - 在 Python 中将字符串转换为带小数的整数

我有一个格式为:Python 中的 'nn.nnnnn' 的字符串,我想将其转换为整数。

直接转换失败:

我可以使用以下方法将其转换为小数:

我也可以拆分'.',然后从零中减去小数点,然后将其添加到整数中......呸。

但我更喜欢将它作为一个 int,而不需要不必要的类型转换或操作。

0 投票
3 回答
992 浏览

c# - dotNet 十进制类型是否容易受到二进制比较错误的影响?

我每隔几个月偶然发现一个错误是这个:

您会假设代码显示“x 等于 y”,但事实并非如此。
简短的解释是小数位表示为二进制数字,不适合双精度数。

示例:2.625 看起来像:

10.101

因为

并且某些值(例如 19.08 加上 2.01 的结果)不能用双精度位表示。

一种解决方案是使用常量:

如果我在第一个示例中使用十进制而不是双精度,则结果是“x 等于 y”。
但我在问自己这是不是因为“十进制”类型不容易受到这种行为的影响,或者它只是在这种情况下起作用,因为值“适合”到 128 位。

也许有人有比使用常量更好的解决方案?

顺便提一句。这不是 dotNet/C# 问题,它发生在我认为的大多数编程语言中。

0 投票
3 回答
16789 浏览

python - 有没有办法在 Python 中获取分数的重复小数部分?

我正在使用 Python 的小数模块处理分数,我想只得到某个分数的重复部分。例如:如果我有 1/3,我想获得 3,如果我有 1/7,我想获得 142857。是否有任何标准函数可以做到这一点?

0 投票
7 回答
64285 浏览

.net - 调整小数精度,.net

C# 中的这些行

生成此输出:

所以我可以看到从文字创建一个十进制变量可以让我控制精度。

  • 我可以在不使用文字的情况下调整十进制变量的精度吗?
  • 如何从 a 创建 b?如何从 c 创建 b?
0 投票
3 回答
3223 浏览

.net - 不四舍五入的十进制格式.net

昨天我问了这个关于小数及其内部精度的一般性问题。这是关于我要解决的场景的具体问题。

我在 SqlServer 中有输入的列 - 十进制(18,6)。当我获取这些值时,创建的 .net 小数与数据库中的精度相匹配。它们看起来像这样:

我需要根据这些规则呈现(ToString)这些值:

  • 始终显示非零。
  • 显示小数点后第 n 位或之前的尾随零。
  • 不显示第 n 位小数后的尾随零。

所以,当 n 为 3 时,这就是我想要的:

现在,我编写了一些 ToString 是小数点的代码 - 删除所有尾随零,然后分析字符串以查找小数点并计算小数位数以查看需要重新添加多少尾随零。 有没有更好的方法来实现这一点?

另外,我知道我在上面的问题中说过 ToString ......但如果我可以在离开我的数据访问层时修改小数,这样消费者总是能以适当的精度获得小数,那就更好了。是否可以在没有字符串操作的情况下对小数本身执行此操作?

0 投票
9 回答
12207 浏览

c++ - C/C++ 以一定的精度有效地四舍五入小数

我正在尝试优化以下内容。下面的代码执行此操作:

如果 a = 0.775 并且我需要精度 2 dp 那么 a => 0.78

基本上,如果最后一位是 5,则向上舍入下一位,否则不向上舍入。

我的问题是 0.45 不会四舍五入到 0.5 小数点后 1,因为该值保存为 0.44999999343.... 并且 setprecision 将其四舍五入为 0.4。

这就是为什么 setprecision 被迫更高setprecision(p+10),然后如果它真的以 5 结尾,添加少量以便正确四舍五入。

完成后,它将 a 与字符串 b 进行比较并返回结果。问题是,这个函数被调用了几十亿次,让程序变得很糟糕。关于如何重写/优化它以及代码中的哪些功能在机器上如此繁重的任何更好的想法?