我需要将double存储为字符串.我知道我可以使用,printf如果我想显示它,但我只是想将它存储在一个字符串变量中,以便我以后可以将它存储在地图中(作为值,而不是键).
我知道0.1十进制数不能用有限的二进制数(解释)精确表示,所以double n = 0.1会失去一些精度而不会完全正确0.1.另一方面0.5可以完全表示,因为它是0.5 = 1/2 = 0.1b.
已经说过,添加0.1 三次不会完全给出0.3以下代码打印是可以理解的false:
double sum = 0, d = 0.1;
for (int i = 0; i < 3; i++)
sum += d;
System.out.println(sum == 0.3); // Prints false, OK
Run Code Online (Sandbox Code Playgroud)
但是,如何增加0.1 五次才会给出确切的答案0.5呢?以下代码打印true:
double sum = 0, d = 0.1;
for (int i = 0; i < 5; i++)
sum += …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个增长率(Double)的计算器,它将结果四舍五入到最接近的整数并从那里重新计算,如下:
let firstUsers = 10.0
let growth = 0.1
var users = firstUsers
var week = 0
while users < 14 {
println("week \(week) has \(users) users")
users += users * growth
week += 1
}
Run Code Online (Sandbox Code Playgroud)
但到目前为止我一直无法做到.
编辑 我有点喜欢这样:
var firstUsers = 10.0
let growth = 0.1
var users:Int = Int(firstUsers)
var week = 0
while users <= 14 {
println("week \(week) has \(users) users")
firstUsers += firstUsers * growth
users = Int(firstUsers)
week += 1
}
Run Code Online (Sandbox Code Playgroud)
虽然我不介意它总是四舍五入,但我不喜欢它,因为 …
如何在C#中格式化Double为a String以便只有两个小数位?
如果我使用String.Format("{0:0.00}%", myDoubleValue)数字然后舍入,我想要一个没有任何舍入的简单截断.我也希望转换成String文化敏感.
编辑:所以基本上我要写的是1位哈希值double.
我想映射double到50/50 true或false50/50的机会.为此,我编写了一些选择随机数的代码(仅作为一个例子,我希望在有规律的数据上使用它并仍然得到50/50的结果),检查它们的最后一位并y在它为1时递增,或者n如果它是0.
但是,此代码不断导致25%y和75%n.为什么不是50/50?为什么这么奇怪,但直截了当(1/3)分布?
public class DoubleToBoolean {
@Test
public void test() {
int y = 0;
int n = 0;
Random r = new Random();
for (int i = 0; i < 1000000; i++) {
double randomValue = r.nextDouble();
long lastBit = Double.doubleToLongBits(randomValue) & 1;
if (lastBit == 1) {
y++;
} else {
n++;
}
}
System.out.println(y + " " …Run Code Online (Sandbox Code Playgroud) public class doublePrecision {
public static void main(String[] args) {
double total = 0;
total += 5.6;
total += 5.8;
System.out.println(total);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印:
11.399999999999
Run Code Online (Sandbox Code Playgroud)
我怎么才能打印(或能够用它)11.4?
可能重复:
将小数点后的双精度数加到2位有效数字
我知道有很多关于如何围绕这种数字的例子.但有人可以告诉我如何圆双,获得我可以显示为字符串的值,并总是有2位小数?
在以下示例中是否可以将除以0(或无穷大)?
public double calculation(double a, double b)
{
if (a == b)
{
return 0;
}
else
{
return 2 / (a - b);
}
}
Run Code Online (Sandbox Code Playgroud)
在正常情况下,它当然不会.但是,如果a并且b非常接近,可能会(a-b)导致0计算的精确性?
请注意,这个问题适用于Java,但我认为它适用于大多数编程语言.
Java是否有能代表每种数值数据类型的无穷大?它是如何实现的,以便我可以用它进行数学运算?
例如
int myInf = infinity; //However it is done
myInf + 5; //returns infinity
myInf*(-1); //returns negative infinity
Run Code Online (Sandbox Code Playgroud)
我尝试使用非常大的数字,但我想要一个合适的,简单的解决方案.