小编msk*_*her的帖子

浮动添加提升到双倍?

今天早上我有一个小型的WTF时刻.WTF可以概括为:

float x = 0.2f;
float y = 0.1f;
float z = x + y;
assert(z == x + y); //This assert is triggered! (Atleast with visual studio 2008)
Run Code Online (Sandbox Code Playgroud)

原因似乎是表达式x + y被提升为double并与之中的截断版本进行比较z.(如果我更改zdouble断言未触发).

我可以看到,出于精确原因,在将结果转换为单精度之前,以双精度执行所有浮点算术是有意义的.我在标准中找到了以下段落(我想我已经知道了,但在这种情况下不是这样):

4.6.1. "类型的右值float可以转换为类型的右值double.值不变"

我的问题是,x + y保证会被提升为双倍,还是由编译人员自行决定?

更新:由于许多人声称不应该使用==浮点数,我只是想说在我正在使用的特定情况下,确切的比较是合理的.

浮点比较棘手的,这里有一个关于这个主题的有趣链接,我认为还没有提到.

c++ floating-point double

12
推荐指数
2
解决办法
3301
查看次数

javascript - 一美元金额的上限

所以我在javascript中添加和减去浮点数,我需要知道如何始终取任何小数超过3位数的数字的上限.例如:

3.19 = 3.19

3.191 = 3.20

3.00000001 = 3.01

javascript math floating-point ceil

12
推荐指数
2
解决办法
1万
查看次数

比较float数组时rspec测试的舍入问题

我想检查一个结果的方法:

 result.should  == [1.0,2.0,3.0]
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

   expected: [1.0, 2.0, 3.0]
        got: [1.0, 2.0, 3.0] (using ==)
Run Code Online (Sandbox Code Playgroud)

我认为四舍五入的问题,但我不知道如何比较它们,例如偏差为0.1.

谢谢你,apneadiving.我写了自己的匹配器,如果它可以帮助某人:

RSpec::Matchers.define :be_closed_array do |expected, truth|
  match do |actual|
    same = 0
    for i in 0..actual.length-1
      same +=1 if actual[i].round(truth) == expected[i].round(truth)
    end
    same == actual.length
  end

  failure_message_for_should do |actual|
    "expected that #{actual} would be close to #{expected}"
  end

  failure_message_for_should_not do |actual|
    "expected that #{actual} would not be close to #{expected}"
  end

  description do
    "be a close to #{expected}"
  end
end
Run Code Online (Sandbox Code Playgroud)

arrays testing floating-point rspec ruby-on-rails

12
推荐指数
1
解决办法
4983
查看次数

格式化双精度而不是四舍五入

我需要格式化(而不是舍入)a double到2位小数.

我尝试过:

String s1 = "10.126";
Double f1 = Double.parseDouble(s1);
DecimalFormat df = new DecimalFormat(".00");
System.out.println("f1"+df.format(f1));
Run Code Online (Sandbox Code Playgroud)

结果:

10.13
Run Code Online (Sandbox Code Playgroud)

但我要求输出 10.12

java floating-point double

12
推荐指数
3
解决办法
3万
查看次数

将字符串"2½"(两个半)转换为2.5

现在我正在构建一个从电子表格导入数据的小应用程序,由于原始条目的性质,读取的字符串具有8½,2½等值.

例如,我使用简单函数的目标是将2½转换为float 2.5.

我已经尝试过.to_f方法,但这给我留下了一个奇怪的值2.02½.

任何见解或建议将非常感谢!

ruby string floating-point ruby-on-rails character-encoding

12
推荐指数
2
解决办法
4444
查看次数

如何在Visual Studio 2010中还原文件(从光盘重新加载文件)

我在Eclipse工作多年后开始使用Visual Studio(2010).

我不时地发现Eclipse的"Revert"功能非常有用,即从磁盘重新加载文件,丢弃所有更改.(与版本控制还原无关.)

我如何使用Visual Studio执行此操作?应该很简单,但我还没有找到它.

我知道我可以通过"撤消直到*-indicator消失"来做到这一点,但这是非常不切实际的.

editor revert visual-studio-2010 visual-studio

12
推荐指数
1
解决办法
3135
查看次数

PHP - 序列化浮点

我在6到8之间生成10个随机浮点数(完全有理由),并以序列化形式将它们写入mysql数据库.但是在存储时似乎出现了一个怪癖:

在存储之前我只是输出相同的数据来查看它的样子,这就是我得到的结果

a:10:{i:0;d:6.20000000000000017763568394002504646778106689453125;i:1;d:7.5999999999999996447286321199499070644378662109375;i:2;d:6.4000000000000003552713678800500929355621337890625;..}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我得到的数字很长,比如6.20000000000000017763568394002504646778106689453125而不是我真正想看到的,只有6.2.只有在我序列化数据时才会发生这种情况,如果我只是输出数组,我确实将浮点值设置为一位小数.这是我的代码:

function random_float ($min,$max) {
   return ($min+lcg_value()*(abs($max-$min)));
}

$a1 = random_float(6, 8);
$a1 = round($a1, 1);
$a2 = random_float(6, 8);
$a2 = round($a2, 1);    
$a3 = random_float(6, 8);
$a3 = round($a3, 1);
    ...
$array = array($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $a10);

echo serialize($array);
Run Code Online (Sandbox Code Playgroud)

php random floating-point serialization

11
推荐指数
3
解决办法
6449
查看次数

停止包含div?

我目前在容器div中设置了div,如下所示:

<div id="container">  
    <div id="element"> Element 1 content </div>  
    <div id="element"> Element 2 content </div>  
    <div id="element"> Element 3 content </div>  
    <div id="element"> Element 4 content </div>  
</div>
Run Code Online (Sandbox Code Playgroud)

style.css中:

.container {
width:200px;
overflow-x:auto;
overflow-y:hidden;
}  

.element {
width:100px;
float:left;
}
Run Code Online (Sandbox Code Playgroud)

这是代码的jsFiddle:http://jsfiddle.net/vZWTc/.

所以,我希望每个元素彼此相邻排列(一行中所有4个),但只有前两个元素可见(容器是200px,每个元素是100px,所以一次只能看到2个) ,用户可以(水平)滚动到第3和第4个元素(因为它们不太重要)

但是,通过此设置,元素3和4将换行到下一行

更新容器类white-space:nowrap没有任何作用.这只会影响文本,而不会影响div.

有任何想法吗?提前致谢!

html css scroll overflow css-float

11
推荐指数
1
解决办法
4万
查看次数

垂直对齐浮点数小数点

有一种简单的方法可以在小数点上对齐一列浮点数吗?换句话说,我希望输出像(垂直条'|'仅用于清晰目的)

(format t "~{|~16,5f|~%~}" '(798573.467 434.543543 2.435 34443.5))
Run Code Online (Sandbox Code Playgroud)

是的

|    798573.44000|
|       434.54355|
|         2.43500|
|     34443.50000|
Run Code Online (Sandbox Code Playgroud)

但是使用尾随空格而不是零,如下所示:

|    798573.44   |
|       434.54355|
|         2.435  |
|     34443.5    |
Run Code Online (Sandbox Code Playgroud)

lisp format floating-point common-lisp vertical-alignment

11
推荐指数
1
解决办法
396
查看次数

在java中截断浮点数和双精度数

我想在java中截断一个float和一个double值.

以下是我的要求:1.如果我有12.49688f,它应该打印为12.49而不会四舍五入2.如果它是12.456的双倍,它应该打印为12.45而不会四舍五入3.无论如何,如果值是这样的话12.0,应仅打印为12.

条件3应始终牢记在心.它应与截断逻辑并发.

java floating-point double truncate

11
推荐指数
2
解决办法
5万
查看次数