我正在寻找将Float转换为Double而不会失去精度的最佳实践.到目前为止,我只发现一种正确的方法是将Float转换为String,将String转换为Double.
搜索Float API我偶然发现了这个方法doubleValue().我认为这是一个静态构造函数,它将从我的Float返回一个double而不会失去精度,但下面的代码表现得像一个强制转换:
public class Main {
public static void main(String[] args) {
Float floatNumber= 4.95f;
Double doubleNumber= floatNumber.doubleValue();
System.out.println(doubleNumber);
}
}
Run Code Online (Sandbox Code Playgroud)
输出为4.949999809265137
从Float API搜索关于此的任何其他文档我没有找到任何文档来告诉我在调用该方法时到底发生了什么.有人有任何想法吗?或者有人可以确认所有方法都执行了将我的Float转换为double和unbox吗?
我在windows7上使用dev cpp来编译我的代码.
int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof (int), sizeof (float));
printf("%p %p\n", &d, (float*)&d);
printf("%p %p %p %p %p\n", &d, &e[0], &e[1], &e[2], &e[3]);
printf(" %d | %x | %#1x | %#1x | %#1x |%p\n", d, e[0], e[1], e[2], e[3], &e[0]);
getchar();
4 4
0028FF40 0028FF40
0028FF40 0028FF40 0028FF41 0028FF42 0028FF43
18 | 12 | 0 | 0 | 0 |0028FF40
Run Code Online (Sandbox Code Playgroud)
你看,如果我使用%d打印d,它打印4个字节的精细.但是,如果我使用下面的%f,它会在必须打印e的第一个字节的位置显示零.任何人都可以帮助解决为什么会这样 为什么e的内容取决于d的格式?
int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof …Run Code Online (Sandbox Code Playgroud) 我将两个数字字符串$ a和$ b加在一起,然后将结果与另一个数字字符串$ c进行比较.所有三个数字都存储为字符串,并在比较步骤中由PHP转换为浮点数.
出于某种原因,测试$ a + $ b == $ c不会评估为真,即使它应该.
您可以使用此脚本重新创建问题:
<?php
$a = "-111.11";
$b = "-22.22";
$c = "-133.33";
echo '$a is '.$a."\n";
echo '$b is '.$b."\n";
echo '$c is '.$c."\n";
echo '$a + $b is '.($a+$b). "\n";
if ($a + $b == $c) {
echo 'a + b equals c'."\n";
} else {
echo 'a + b does not equal c'."\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我稍微更改这些值,以便$ a = -111.11,$ b = -22.23和$ c = -133.34,它会按预期工作.
我错过了一些明显的东西,或者这是PHP的错误?
请为我这个非常基本的问题鞭挞我,但我仍然无法理解为什么会这样.
我读到了为了在昏迷后打印几个值,我应该在C中使用%.f
所以我有这个问题,计数90/100.我希望打印0.9
#include <stdio.h>
#include <math.h>
int main()
{
double c=0;
c = 90/100;
printf("%.1f\n", c);
}
Run Code Online (Sandbox Code Playgroud)
它显示我0.0 ..(错误..).试图将其更改为(printf("%f \n",c))返回0.00000 ..(错误..)
谁能帮我这个?(对不起,编程真的很新......)
谢谢
描述有点混乱,但我有两个 div。一个位于页面左侧,一个通过浮动位于右侧。右边的在 HTML 中是第一个,左边的在第二个。基本上,我想拥有它,因此左侧 div 位于顶部,右侧 div 位于其下方。如果 HTML 中的 Left 和 Right 是按顺序排列的,那么就像删除浮动一样简单。但是,由于情况并非如此,我需要一点帮助。这是我设置的 jsfiddle:http : //jsfiddle.net/7bTjj/
如何检查字符串是数字正数,可能是逗号作为小数分隔符和最多两位小数.
例
10.25是真的10.2是真的10.236是假的theres 3十进制10.dee是假的
我发现了一段代码来对网络上的浮点数进行序列化.
uint32_t htonf(float f)
{
uint32_t p;
uint32_t sign;
if (f < 0) { sign = 1; f = -f; }
else { sign = 0; }
p = ((((uint32_t)f)&0x7fff)<<16) | (sign<<31); // whole part and sign
p |= (uint32_t)(((f - (int)f) * 65536.0f))&0xffff; // fraction
return p;
}
Run Code Online (Sandbox Code Playgroud)
规范:上面的代码是一种天真的实现,它存储一个32位数的浮点数.高位(31)用于存储数字的符号("1"表示负数),接下来的7位(30-16)用于存储浮点数的整数部分.最后,剩余的比特(15-0)用于存储数字的小数部分.
其他人都很好,但我无法弄清楚这意味着什么.这怎么能让我们得到15-0位?为什么我们需要"*65536.0f"?
p |= (uint32_t)(((f - (int)f) * 65536.0f))&0xffff
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
我遇到了以下代码的问题.它将毫秒转换为月,日,小时和分钟.
long diffms = date2l - date1l; //The result here is in milliseconds; The value of date2l - date1l are different
long diff_minute = diffms / 60000;
long diff_hour = diff_minute / 60; float diff_minute_now = (diff_minute % 1) * 60; int dmn = (int) diff_minute_now;
long diff_day = diff_hour / 24; float diff_hour_now = (diff_hour % 1) * 24; int dhn = (int) diff_hour_now;
long diff_month = diff_day / 30; float diff_day_now = (diff_day % 1) * 30; int …Run Code Online (Sandbox Code Playgroud) 我有一个带浮点数的文件,这是一个例子:
0.01
0.24
0.08
0.15
0.7
0.22
0.05
0.28
0.4
0.44
0.8
0.55
Run Code Online (Sandbox Code Playgroud)
现在我需要获得所有浮动的数量(在这种情况下为12).应避免空行.
我这样做了:
FILE *f, *junk;
if (MYTHREAD == 0) {
f = fopen ("dane.dat", "r");
junk = fopen ("/dev/null", "w");
for(size = 0; fscanf(f, "%f\n", junk) != EOF; ++size);
fclose(junk);
fclose(f);
}
Run Code Online (Sandbox Code Playgroud)
它返回128 O_o.怎么了?
void main()
{
float x = 8.2;
int r = 6;
printf ( "%f" , r/4);
}
Run Code Online (Sandbox Code Playgroud)
很明显,我没有明确地将printf函数中的r(int类型)强制转换为float.但是,如果我改变声明x和r的顺序并首先声明r然后xi得到不同的结果(在这种情况下它是一个垃圾值).我再也没有在程序中使用x ..这些是我想要错的东西......我想让它们保持原样.但是,当我执行第一段代码时,我得到157286.375011(垃圾值).
void main()
{
int r = 6;
float x = 8.2;
printf ( "%f" , r/4);
}
Run Code Online (Sandbox Code Playgroud)
如果我执行上面的代码,我得到0.000000作为结果.我知道结果可能会出错,因为我在printf中使用%f时应该是%d ...结果可能是错误的...但我的问题是当我改变变量定义序列时结果会发生变化的原因.无论是对还是错,不应该是一样的吗?
为什么会这样?