问题标签 [rounding]

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 投票
10 回答
35822 浏览

java - 如何在 Java 中四舍五入货币值?

好的,这是我的问题。基本上我有这个问题。

我有一个像 .53999999 这样的数字。如何在不使用任何数学函数的情况下将其四舍五入到 54?

我猜我必须乘以 100 来缩放它,然后除以?类似的东西?


问题在于钱。假设我有 50.5399999 美元,我知道如何获得 50 美元,但我不知道如何获得美分。我可以得到 .539999 部分,但我不知道如何将其变为 54 美分。

0 投票
4 回答
98410 浏览

c++ - C++ 中的 Round() 在哪里?

重复:round() 用于 C++ 中的浮点数


我正在使用 VS2008 并且我已经包含了 math.h 但我仍然找不到圆形函数。它存在吗?

我在 google 上看到一堆“添加 0.5 并转换为 int”的解决方案。这是最佳做法吗?

0 投票
7 回答
9074 浏览

objective-c - NSTimeInterval 到可读的 NSNumber

NSTimeInterval == 双倍;(例如 169.12345666663)

我怎样才能把这个双数四舍五入,以便在“点”之后只剩下 2 位数字?
如果结果是 NSNumber,那就太好了。

0 投票
2 回答
13028 浏览

floating-point - 将浮点范围转换/量化为整数范围

假设我有一个 [0, 1] 范围内的浮点数,我想量化它并将其存储在一个无符号字节中。听起来很简单,但实际上它相当复杂:

显而易见的解决方案如下所示:

到目前为止,这有效,我得到了从 0 到 255 的所有数字,但整数的分布并不均匀。该函数仅255在 a 恰好为时返回1.0f。不是一个好的解决方案。

如果我进行适当的舍入,我只是转移问题:

这里的结果0只覆盖了浮动范围的一半,而不是任何其他数字。

如何进行浮点范围均匀分布的量化?理想情况下,如果我量化均匀分布的随机浮点数,我希望得到整数的均匀分布。

有任何想法吗?


顺便说一句:我的代码也在 C 中,问题与语言无关。对于非 C 语言的人:假设float转换会int截断浮点数。

编辑:因为我们在这里有些困惑:我需要一个映射,将最小的输入浮点数(0)映射到最小的无符号字符,并将我范围的最高浮点数(1.0f)映射到最高的无符号字节(255)。

0 投票
8 回答
186378 浏览

c# - 如何将双精度值转换为最接近的整数值?

如何将 double 转换为最接近的 int?

0 投票
3 回答
6954 浏览

java - 将 Java BigDecimal 舍入到最近的间隔

我有一个 BigDecimal 计算结果,我需要将其四舍五入到最接近的指定间隔(在这种情况下,它是金融市场的刻度大小)。

例如价格 [Tick Size] -> 四舍五入的价格

谢谢。

更新:schnaader 的解决方案,翻译成 Java/BigDecimal 术语:

0 投票
1 回答
3327 浏览

c++ - 如何进行带偏差的浮点舍入(始终向上或向下舍入)?

我想用偏差来舍入浮点数,要么总是向下,要么总是向上。代码中有一个特定点我需要这个,程序的其余部分应该像往常一样四舍五入到最接近的值。

例如,我想四舍五入到最接近的 1/10 倍数。最接近 7/10 的浮点数约为 0.69999998807,但最接近 8/10 的浮点数约为 0.80000001192。当我对数字进行四舍五入时,这是我得到的两个结果。我宁愿让它们以同样的方式四舍五入。7/10 应四舍五入为 0.70000004768,8/10 应四舍五入为 0.80000001192。

在这个例子中,我总是向上取整,但我有一些地方我想总是向下取整。幸运的是,我只在这些地方处理积极的价值观。

我用来四舍五入的线是floor(val * 100 + 0.5) / 100. 我正在用 C++ 编程。

0 投票
2 回答
784 浏览

.net - 如何在 .NET 中将双精度值舍入为选定的小数位数?

我使用加速度传感器来计算当前加速度并返回双精度值。

但是我想将当前加速度与值 9.8 进行比较。在此之前,我必须对从传感器接收到的值进行四舍五入,所以问题是:如何在 .NET 中将双精度值四舍五入为选定的小数位数?

0 投票
7 回答
746 浏览

c# - 为什么在C#中添加多个双精度时顺序会影响舍入

考虑以下 C# 代码:

result1 应该总是等于 result2 对吧?问题是,它没有。结果 1 为 3.3,结果 2 为 3.3000000000000003。唯一的区别是常量的顺序。

我知道双打的实现方式可能会出现舍入问题。我知道如果我需要绝对精度,我可以使用小数。或者我可以在 if 语句中使用 Math.Round() 。我只是一个想了解 C# 编译器在做什么的书呆子。谁能告诉我?

编辑:

感谢迄今为止建议阅读浮点运算和/或谈论 CPU 如何处理双精度数的固有不准确性的所有人。但我觉得我的问题的主旨仍未得到解答。这是我没有正确措辞的错。让我这样说:

分解上面的代码,我预计会发生以下操作:

让我们假设上述每个添加都有一个舍入误差(编号为 e1..e4)。所以 r1 包含舍入误差 e1,r2 包含舍入误差 e1 + e2,r3 包含 e3,r4 包含 e3 + e4。

现在,我不知道舍入误差是如何发生的,但我希望 e1+e2 等于 e3+e4。显然不是,但这对我来说似乎是错误的。另一件事是,当我运行上面的代码时,我没有得到任何舍入错误。这就是让我认为是 C# 编译器在做一些奇怪的事情而不是 CPU 的原因。

我知道我问了很多,也许任何人都能给出的最佳答案是去攻读 CPU 设计的博士学位,但我只是想我会问。

编辑 2

从我的原始代码示例中查看 IL,很明显是编译器而不是 CPU 执行此操作:

编译器正在为我添加数字!

0 投票
6 回答
40741 浏览

sql - 为什么 SQL Server 将两个整数相除的结果四舍五入?

我有一个带有 smallint 列的表,其中包含整数百分比(即 50、75、85 等)

当我将此列除以 100 时,如

结果四舍五入到最接近的整数。例如,对于包含数字“50”的行,我的结果是零。

我可以用一个简单的语句来复制它:

为什么会这样,我怎样才能获得更精确的结果?