舍入数值意味着将其替换为大致相等但具有更短,更简单或更明确的表示的另一个值。
SQL Server DATEDIFF 对年份差异进行四舍五入。如何四舍五入?
我遇到了一个问题,我尝试用谷歌搜索,但大多数问题都是关于小时或分钟的四舍五入。 我正在检查用户的生日日期,有两个日期相差 99.3 年。这意味着...
我想在 ggplot2 图上显示四阶多项式回归方程。 这里提出的 lm_equ 函数接近我的目标,除了所有系数都用...
Python 中默认的舍入模式(舍入到最接近的值等)是什么?我们如何指定它?
根据常识,什么是正确的: (int) blabla * 255.99999999999997 还是 round(blabla*255)?
最近我在webkit源码中发现了这个有趣的事情,与颜色转换(hsl到rgb)相关: http://osxr.org/android/source/external/webkit/Source/WebCore/platform/graphics/Color.cpp#0111
根据文档,decimal.Round方法使用舍入到偶数算法,这对于大多数应用程序来说并不常见。所以我总是最终编写一个自定义函数来做到更自然
我有大量跨越 20 年的动态数据。我需要创建一个函数,可以将小到 0.000600 的数字正确舍入到 3 位有效数字,大到 999。我 h...
我正在使用signif函数四舍五入到3个Sig Fig。我有 1.275 作为原始数字,但 R 返回 1.27 而不是 1.28。这是为什么?我确实希望它能进行“银行家四舍五入”...
我需要四舍五入,应该是小数点后两位。 尝试了以下方法, a = 28.266 打印轮(a, 2) 28.27 但预期值只有28.26。
我正在开发 REST API 并返回 JSON。其中一个字段称为submissionPercent,我需要它是一个数字,但精确到小数点后两位 如果submissionPercent是20,我需要
我将版本从.NET Core 3.1转换到6.0后,我发现所有decimal(10, 5)类型的列都会自动四舍五入数字的小数部分并将其保存在数据库中......
问题:为什么 C# 中的 Math.Round 方法会意外地对数字进行舍入,如何解决此问题?
我在 C# 中遇到了数字舍入的问题。乍一看,Math.Round() 方法似乎工作正常,但是当对某些数字进行舍入时,结果却出乎意料。 例子: 为了新...
我有一个Python Decimal(货币金额),我想将其四舍五入到小数点后两位。我尝试使用常规 round() 函数来执行此操作。不幸的是,这会返回一个浮点数,这使得它
PostgreSQL 中的 round(numeric,integer) 函数仅向上舍入: round(cast (41.0255 as numeric),3) ==> 41.026 因为我们需要一个返回 41.025 的舍入函数并且(非常令人惊讶)...
我正在尝试切换到“新”tidyverse 生态系统,并尽量避免加载 Wickham 等人的旧包。我以前曾经依赖我的编码。我从 plyr 中找到了 round_any 函数
为什么 BigDecimal 除法中的 RoundingMode.HALF_EVEN 将 0.454 舍入为 0.5?
舍入模式 HALF_EVEN 应该将以 5 结尾的(十进制)数字舍入到最接近的甚至不太精确的数字(例如,4.5 舍入为 4,而 5.5 舍入为 6)。 现在看来……
我有一个双精度数(称之为x),本来是55,但实际上存储为54.999999999999943157,我刚刚意识到。 所以当我这样做时 双x = 54.999999999999943157; int y = (int) x; y = 54 相反...
我有一个双精度数(称之为x),本来是55,但实际上存储为54.999999999999943157,我刚刚意识到。 所以当我这样做时 双x = 54.999999999999943157; int y = (int) x; y = 54 相反...
我正在尝试实现带有舍入的整数除法。显然,默认情况下整数除法会取整,我想我可以使用余数来确定是否应该在结果中加 1。
我有一些代码可以解析浮点数,如果可以将数字转换为无符号而不丢失精度,则返回无符号整数: #包括 #包括 我有一些代码可以解析浮点数并返回一个无符号整数(如果该数字可以转换为无符号而不丢失精度): #include <charconv> #include <string_view> #include <stdint.h> uint64_t read_uint(std::string_view num) { double d; auto r = std::from_chars(num.data(), num.data() + num.size(), d); if (r.ec == std::errc() && r.ptr == num.data() + num.size()) { uint64_t u = (uint64_t)d; if (d == u + 0.0) // conversion back to a double produced identical value return u; } return ~0ull; // error, return -1 } 期望是: assert(read_uint("1.0") == 1); assert(read_uint("1.0654553e+07") == 10654553); assert(read_uint("1.1") == ~0ull); // error assert(read_uint("-123") == ~0ull); // error 但是,当以 avx/avx2/avx512 为目标并使用 -fast-math 时,此代码在 x64/x86 优化构建上惨遭失败。具体来说,解析负数失败: assert(read_uint("-123") == ~0llu); 它不是返回 -1,而是实际返回 -123(转换为 uint64_t)。失败的原因是因为转换回 double 来验证结果是否相同会产生不同的结果: uint64_t u = (uint64_t)d; if (d == u + 0.0) // u + 0.0 produces different result return u; 顺便说一句,当瞄准avx512时,投射也会产生不同的价值: uint64_t u = (uint64_t)d; // u might not be exact when targeting avx512 显然,这段代码充满了错误和陷阱,我有一些问题: 有什么问题,有UB吗? (忽略像底层 uint64_t 这样明显的东西可能无法用双精度表示) 为什么uint64_t u = (uint64_t)d用fast-math和avx512产生不同的结果? 为什么u + 0.0用fast-math和avxN产生不同的结果? 这里正确的方法应该是什么? 是否有编译时标志来识别代码中此类可能的情况? 注意,对于 MS 编译器,我没有看到上述任何问题。无论优化、浮点模型或目标架构如何,值始终准确/相同。 顺便说明一下,这并不是产品中使用的确切代码,而是其中的一些摘录。它解析由 Polygon.io json API 返回的数字。也许,他们不小心使用 python 转储了数字,我见过一些情况,其中值是“1.0”、“1.0654553e+07”等,而不是普通整数。到目前为止,作为一个简单的解决方法,我将转换为 uint64_t 更改为: uint64_t u = (uint64_t)fabs(d); 最小示例:https://godbolt.org/z/cKzrK6ven(如果从 clang cmdline 输出中删除 -O2 将会改变) 是的,您的代码有未定义的行为。 N4928 转换 fpint p1 浮点类型的纯右值可以转换为整数类型的纯右值。转换截断; 即小数部分被丢弃。如果无法表示截断值,则行为未定义 在目的地类型中。 截断值为-123,无法在目标类型中表示uint64_t(它只能表示非负值),因此这是未定义的行为。 请注意,无论您使用 C 风格转换 (uint64_t)d 还是 static_cast<uint64_t>(d),这都适用。 确实,将值为 -123 的 integer 类型的值转换为 uint64_t 会产生明确定义的结果(即 2^64 - 123 = 18446744073709551493)。 但这不适用于转换浮点类型的值。