我有一个原始的浮点数,我需要作为一个原始的双.简单地将浮子铸造成双倍会给我带来奇怪的额外精度.例如:
float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375
Run Code Online (Sandbox Code Playgroud)
但是,如果不是强制转换,我将float作为字符串输出,并将字符串解析为double,我得到我想要的:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
Run Code Online (Sandbox Code Playgroud)
有没有比去String更好的方法呢?
这是我多年来一直想到的事情,但我从来没有花时间问过.
许多(伪)随机数生成器生成0.0到1.0之间的随机数.在数学上,此范围内有无限数,但是double是浮点数,因此具有有限的精度.
所以问题是:
double在0.0和1.0之间有多少个数字?注意:如果它有所不同,我double特别感兴趣的是Java的定义.
我最近学得很快,但我有一个无法找到答案的基本问题
我想得到类似的东西
var a:Int = 3
var b:Int = 3
println( pow(a,b) ) // 27
Run Code Online (Sandbox Code Playgroud)
但pow函数只能使用double数,它不能用整数运算,我甚至无法通过Double(a)或a.double()等函数将int转换为double.
为什么它不提供整数的幂?它肯定会返回一个没有歧义的整数!为什么我不能将整数转换为double?它只是改变3到3.0(或3.00000 ...无论如何)
如果我有两个整数并且我想进行电源操作,我该怎样才能顺利完成?
谢谢!
我注意到我总是使用int和double,不管数量需要多大或多小.所以在java中,使用byte或short代替int而float不是代替double?
所以假设我有一个有大量整数和双打的程序.如果我知道这个数字适合的话,是否值得通过并将我的int更改为字节或短裤?
我知道java没有无符号类型,但如果我知道这个数字只是正数,那么还有什么我可以做的吗?
通过有效我主要是指处理.如果所有变量都是一半大小并且计算可能会稍快一些,我认为垃圾收集器会快得多.(我想因为我正在开发android,所以我也需要担心ram)
(我假设垃圾收集器只处理对象而不是原始但仍然删除被遗弃对象中的所有原语吗?)
我尝试了一个小的Android应用程序,但我没有真正注意到差异.(虽然我没有"科学地"衡量任何东西.)
假设它应该更快更有效,我错了吗?我讨厌在一个庞大的计划中改变一切,发现我浪费了我的时间.
当我开始一个新项目时,从一开始就值得做吗?(我的意思是我认为每一点都会有所帮助,但如果是这样的话,为什么不像任何人那样做.)
在我们的代码中,我们有一个我们需要转换为int的double.
double score = 8.6;
int i1 = Convert.ToInt32(score);
int i2 = (int)score;
Run Code Online (Sandbox Code Playgroud)
谁能解释我为什么i1 != i2?
我得到的结果是:i1 = 9和i2 = 8.
我y在javascript中有大量的数值.我想通过将它们舍入到最接近的倍数来对它们进行分组x,并将结果转换为字符串.
如何绕过恼人的浮点精度?
例如:
0.2 + 0.4 = 0.6000000000000001
Run Code Online (Sandbox Code Playgroud)
我尝试了两件事:
>>> y = 1.23456789
>>> x = 0.2
>>> parseInt(Math.round(Math.floor(y/x))) * x;
1.2000000000000002
Run Code Online (Sandbox Code Playgroud)
和:
>>> y = 1.23456789
>>> x = 0.2
>>> y - (y % x)
1.2000000000000002
Run Code Online (Sandbox Code Playgroud) javascript floating-point double floating-accuracy numerical-methods
我的应用程序使用VSTO读取Excel文件并将读取的数据添加到StringDictionary.它仅添加具有几位数字的数据(1000 1000,2 1000,34 - 逗号是俄罗斯标准中的分隔符).
最好检查当前字符串是否是合适的数字?
object data, string key; // data had read
try
{
Convert.ToDouble(regionData, CultureInfo.CurrentCulture);
dic.Add(key, regionData.ToString());
}
catch (InvalidCastException)
{
// is not a number
}
Run Code Online (Sandbox Code Playgroud)
要么
double d;
string str = data.ToString();
if (Double.TryParse(str, out d)) // if done, then is a number
{
dic.Add(key, str);
}
Run Code Online (Sandbox Code Playgroud)
我必须使用StringDictionary而不是Dictionary<string, double>因为以下解析算法问题.
我的问题:哪种方式更快?哪个更安全?
打电话Convert.ToDouble(object)或者打电话会更好Convert.ToDouble(string)吗?
例如,我有变量3.545555555,我想截断到3.54.
当我打电话Math.ceil(5.2)给退货的时候double 6.0.我的自然倾向是认为Math.ceil(double a)会回归long.从文档:
ceil(double a)返回
double不小于参数且等于数学整数的最小(最接近负无穷大)值.
但是为什么当结果是整数时返回a double而不是a long?我认为理解它背后的原因可能会帮助我更好地理解Java.它也可以帮助我弄清楚我是否会因为施放到自己而陷入困境long,例如是
long b = (long)Math.ceil(a);
总是我认为它应该是什么?我担心可能会出现一些有问题的边界情况.
我有一个双值,我必须在我的UI上显示.现在条件是double = 0的十进制值,例如. - 14.0在这种情况下,我必须在我的UI上只显示14.此外,字符的最大限制为5.
例如,12.34整数值不能大于2位,因此是double的十进制值.
这可能是最好的方法吗?