在c ++中,如何知道使用IEEE 754-1985标准何时可以准确表示十进制数.例如0.2无法准确表示.
有一个简单的规则吗?
我有一个我这样创建的Double:
Double d = Double.parseDouble( "27.86753" ); // All the digits of this double value are 27.867530822753906
Run Code Online (Sandbox Code Playgroud)
这个特殊的double也可以用float表示,所以Java会删除其余的数字.我如何强制Java给我这个值的真正双重表示(所有数字)?
我正在尝试在MySQL中存储浮点值,我的值似乎一直在搞乱.:(
我将我的字段定义为,float(10,7)并在插入之前在PHP中正确地舍入我的值:
$rndval = round($val,7)
INSERT INTO mytable (float) VALUES ($rndval)
Run Code Online (Sandbox Code Playgroud)
但是当我插入一个47.5206797之类的值时,它在我的表中显示为47.520679 5.这是为什么?
如何从Singlevba中的变量中提取位?
例如,我想提取位23到30并将它们放入整数的最低8位.
我希望0.5能够圆满结束1.任何人都可以解释为什么它会向下0舍入?
>>> from decimal import *
>>> getcontext().prec = 0
>>> +Decimal(0.5)
Decimal('0')
Run Code Online (Sandbox Code Playgroud) 我的目标是创建一个将度数转换为弧度的程序.公式是(度*3.14)/ 180.但是python不断给我这个错误:
Traceback (most recent call last):
File "2.py", line 6, in <module>
main()
File "2.py", line 4, in main
degrees = (degrees * 3.14) / 180
TypeError: can't multiply sequence by non-int of type 'float'
Run Code Online (Sandbox Code Playgroud)
从这段代码:
def main():
degrees = raw_input("Enter your degrees: ")
float(degrees)
degrees = (degrees * 3.14) / 180
main()
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢大家的帮助!
我不是问如何实现这个,这个概念很简单.我遇到的问题是花车.这是我的代码:
Position += mVelocity;
if (!Keyboard.GetState().IsKeyDown(Keys.Left) && !Keyboard.GetState().IsKeyDown(Keys.Right) && !Keyboard.GetState().IsKeyDown(Keys.Down) && !Keyboard.GetState().IsKeyDown(Keys.Up))
{
if (mVelocity.X != 0.0F)
{
if (mVelocity.X > 0.0F)
mVelocity.X -= mFriction;
if (mVelocity.X < 0.0F)
mVelocity.X += mFriction;
}
if (mVelocity.Y != 0.0F)
{
if (mVelocity.Y > 0.0F)
mVelocity.Y -= mFriction;
if (mVelocity.Y < 0.0F)
mVelocity.Y += mFriction;
}
}
Console.WriteLine(mVelocity.X + ", " + mVelocity.Y);
Run Code Online (Sandbox Code Playgroud)
mFriction是0.2F.
问题是,如果我以正速度(X或Y)移动玩家,摩擦力就会发挥作用,他的速度降低到0.0.但是,如果我以负速度移动他,摩擦会增加,并且出于某种原因,不会停在0.0,而是在停止之前上升到0.2.因此,我有一个移动的玩家,然后当我松开钥匙时,他开始在相反的方向缓慢滑动.为什么是这样?我该如何解决?
另外,我试过这段代码进行测试:
if (mVelocity.X == 0.2F)
mVelocity.X = 0.0F;
if (mVelocity.Y == 0.2F)
mVelocity.Y = 0.0F;
Run Code Online (Sandbox Code Playgroud)
但它给了我完全相同的结果,好像我没有添加代码.显然,0.2F不等于0.2F.这可能是什么?
最后,在调试输出中,当玩家处于静止状态时,他可以正向移动(假设停止)他的x和y的速度(取决于我如何移动他)是2.980232E-08.我不明白这一点.如果我将速度设置为1,并且每帧减去0.2,那为什么它会以1.0,0.8,0.6,0.4,0.2,0.0之外的其他方式去除?接下来,如果他因为负面移动而处于休息状态,他对x和y的速度(再次,取决于我如何移动他)是0.2.为什么它不会变为-1,-0.8,-0.6,-0.4,-0.2,0.0?而不是从0.0到0.2超过.
这一切对我来说毫无意义,如果有人能为我清楚这一点,我将不胜感激.任何替代解决方案也被接受.如果需要更多代码或澄清,我很乐意提供.
我正在使用Android手势和onFling方法.有两个浮点变量通过velocityX和velocityY.这些论文可以是0.0,正面或负面.显然0.0很容易检测,但我如何检测它是正还是负浮点数.
我找到了一些int和double的代码,但没有任何与float特别相关的代码.
在循环中,我添加0.10,直到达到所需的#,并获得索引.这是我的代码:
private static int getIndexOfUnits(float units) {
int index = -1;
float addup = 0.10f;
for(float i = 1.00f; i < units; i=(float)i+addup) {
index++;
System.out.println("I = " + i + " Index = " + index);
}
return index;
}
Run Code Online (Sandbox Code Playgroud)
如果通过的单位是5.7,我看到的输出是:
I = 1.0 Index = 0
I = 1.1 Index = 1
I = 1.2 Index = 2
I = 1.3000001 Index = 3
I = 1.4000001 Index = 4
I = 1.5000001 Index = 5
I = …Run Code Online (Sandbox Code Playgroud) 我遇到了这个奇怪的问题.

为什么会这样?!应该这样吗?