我想在Go中执行一个简单的划分.
fmt.Println(3/10)
Run Code Online (Sandbox Code Playgroud)
这打印0而不是0.3.这有点奇怪.有人可以分享一下这背后的原因是什么?我想在Go中执行不同的算术运算.
谢谢
我很想知道如何将数字舍入到最接近的第十个整数.例如,如果我有:
int a = 59 / 4;
Run Code Online (Sandbox Code Playgroud)
以浮点计算的14.75; 如何将数字存储为"a"中的15?
在Perl中总是进行整数除法的好方法是什么?
例如,我想:
real / int = int
int / real = int
int / int = int
Run Code Online (Sandbox Code Playgroud) 我最近注意到将int()浮点数舍入到 0,而整数除法将浮点数舍入到它的下限。
例如:
-7 // 2 = -4
int(-7/2) = -3
Run Code Online (Sandbox Code Playgroud)
我已阅读指定的文档:
类 int(x, base=10)
返回一个由数字或字符串 x 构造的整数对象,如果没有给出参数,则返回 0。如果 x 是数字,则返回 x。整数()。对于浮点数,这会向零截断。
和:
楼层划分
向下舍入到最接近的整数的数学除法。楼层除法运算符是 //。例如,与 float true 除法返回的 2.75 相比,表达式 11 // 4 的计算结果为 2。请注意 (-11) // 4 是 -3,因为这是向下舍入的 -2.75。参见 PEP 238。
但对我来说,2 个类似的操作(浮点除法到整数)应该返回不同的结果似乎不合逻辑。
功能之间的差异是否有任何动机?
谢谢你。
可能重复:
为什么我不能从被分割的两个整数中返回一个双精度数
即使我尝试将输出放入浮点数,我的C++程序也会截断整数分割的输出.如何在保持变量(a和b)为整数的同时防止这种情况?
user@box:~/c/precision$ cat precision.cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a = 10, b = 3;
float ans = (a/b);
cout<<fixed<<setprecision(3);
cout << (a/b) << endl;
cout << ans << endl;
return 0;
}
user@box:~/c/precision$ g++ -o precision precision.cpp
user@box:~/c/precision$ ./precision
3
3.000
Run Code Online (Sandbox Code Playgroud) int totalOptCount = 500;
int totalRespCount=1500;
float percentage =(float)(totalOptCount/totalRespCount);
Run Code Online (Sandbox Code Playgroud)
为什么这总是返回值0.0?另外我想将其格式化为00.00格式并转换为字符串?
在我测试的语言中,- (x div y )不等于-x div y; 我已经//在Python中,/在Ruby中,div在Perl 6中进行了测试; C有类似的行为.
这种行为通常是根据规范,因为div通常被定义为舍入向下分工的结果,但它不从的观点算术点做出很大的意义,因为它使div行为以不同的方式取决于标志,它引起混乱,如这篇文章如何在Python中完成.
这个设计决策背后是否有一些特定的理由,或者只是div从头开始定义?显然Guido van Rossum在博客文章中使用了一致性论证,解释了它是如何在Python中完成的,但如果你选择整理,你也可以有一致性.
这是我的测试代码:
#include <chrono>
#include <iostream>
#include <cstdlib>
using namespace std;
using ll = long long;
int main()
{
__int128_t a, b;
ll x, y;
a = rand() + 10000000;
b = rand() % 50000;
auto t0 = chrono::steady_clock::now();
for (int i = 0; i < 100000000; i++)
{
a += b;
a /= b;
b *= a;
b -= a;
a %= b;
}
cout << chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - t0).count() << ' '
<< (ll)a % 100000 << '\n';
x = …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我遇到了以下结果,并对结果感到惊讶:
8/-7=-2 (两个整数).
这意味着什么?
是否有可能通过使用纯位加法,减法除以10的无符号整数,也许繁衍?使用资源非常有限且速度慢的处理器.