jjzjj

Precision

全部标签

php - json_encode 中小 float 的表示

我正在PHP脚本中执行以下代码:$obj=new\stdClass();$obj->lat=0.000011399388312455;echojson_encode($obj)."\n";脚本的输出是{"lat":1.1399388312454999446e-5}如您所见,该数字以指数表示法表示。有什么方法可以在JSON序列化对象中以扩展符号表示该特定数字吗?期望的输出是{"lat":0.000011399388312455}PHP版本为5.6.30。P.S.:这个JSON序列化对象将被发送到不接受指数形式数字的外部网络服务。此外,它必须是数字而不是字符串({"lat":"0.0000

PHP - 8 位小数不起作用

这是一个非常简单的代码。$a=2000000.00000000;$b=0.00000001;echo$a-$b;//output2000000Iwasexpecting1999999.99999999.有人可以解释一下如何让它工作吗?将不胜感激。 最佳答案 您可以使用precision设置将float格式化为字符串时使用的精度ini设置,默认为14:ini_set('precision',16);echo$a-$b;//1999999.99999999另请阅读thisarticle有关该主题的更一般的分割。

PHP 舍入数字

我似乎无法弄清楚如何在PHP中始终进行四舍五入。ceil()将是显而易见的选择,但我需要round()提供的相同功能及其第二个参数“precision”。这是一个例子://Desiredresult:6250echoround(6244.64,-2);//returns6200echoround(6244.64,-1);//returns6240echoceil(6244.64)//returns6245我需要始终对数字进行四舍五入,以便我可以根据图表的参数计算出一个相等的除数。 最佳答案 来自对http://php.net/man

PHP按位左移32个空格问题和大量算术运算的不良结果

我有以下问题:首先:我正在尝试对一个大数进行32个空格的按位左移,但出于某种原因,该数总是按原样返回。例如:echo(516103988因为将位向左移动一个空格相当于乘以2,所以我尝试将数字乘以2^32,结果成功了,它返回2216649749795176448。其次:我必须将9379添加到上述点的数字中:printf('%0.0f',2216649749795176448+9379);//prints2216649749795185920应该打印:2216649749795185827 最佳答案 执行32位移位操作可能不会像您预期的

PHP 浮点精度 : Is var_dump secretly rounding and how can I debug precisley then?

PHP中的float不准确是众所周知的(http://php.net/manual/de/language.types.float.php),但是经过以下实验后我有点不满意:var_dump((2.30*100));//float(230)var_dump(round(2.30*100));//float(230)var_dump(ceil(2.30*100));//float(230)var_dump(intval(2.30*100));//int(229)var_dump((int)(2.30*100));//int(229)var_dump(floor(2.30*100));//

php - json_encode 添加大量十进制数字

为什么会这样?我可以防止这种情况吗?(除了将它们作为字符串传递)var_dump(json_encode([1002.31,2002.42]));输出:string(39)"[1002.3099999999999,2002.4200000000001]" 最佳答案 您应该配置“precision”'和'serialize_precision'参数。precision=14serialize_precision=-1测试用例:php-r'var_dump(json_encode([1002.31,2002.42]));'string(

java - Java中的 float 范围

我一直在尝试使用Java编写以下代码:importjava.math.*;publicclasstrial{publicstaticvoidmain(String[]args){//createaBigDecimalobjectBigDecimalbg;//createaFloatobjectFloatf;floatf2=35912062;bg=newBigDecimal(35912062);//assigntheconvertedvalueofbgtoff=bg.floatValue();Stringstr="Floatvalueof"+bg+"is"+f;bg=newBigDeci

Java - 通过转换为 double 在 long 中查找前导零

在找到方法之前Long.numberOfLeadingZeros(longi),我将多头投向double并使用Math.getExponent(doubled).想法是找到long的double表示,使用指数获得最高设置位,然后从64中减去它以获得前导零的数量。这主要是有效的,但偶尔会偏离1。使用以下for循环来突出问题:for(inti=0;i>>i;doublemin=Long.MIN_VALUE>>>i;doubleneg=-1L>>>i;System.out.format("Max:%-5dMin:%-5d-1:%-5d%n",Math.getExponent(dmax),Ma

java - 使用 NumberFormat 具有两位小数的 double 值

我正在使用java.text.NumberFormat使用conman分隔格式将我的double值转换为两位小数。我的行代码是:NumberFormat.getNumberInstance(Locale.US).format(53508));此代码会将53508转换为53,508格式,但我需要53,508.00格式(小数点后两位)。 最佳答案 谢谢friend我解决了....:)下面是代码行NumberFormatformatter=NumberFormat.getInstance(Locale.US);formatter.setM

Java:Math.random() Max Value (double just less than 1)

我一直对这个有点好奇。Math.random()给出[0.0,1.0)范围内的值。那么它能给出的最大值(value)是多少呢?换句话说,小于1.0的最接近1.0的double值是多少? 最佳答案 Java使用64位IEEE-754表示,因此理论上小于1的最接近数字是十六进制表示形式的3FEFFFFFFFFFFFFFF,符号为0,指数为-1,52位有效数为1.9999999999999997。这大约等于0.9999999999999998。引用文献:IEEE-754Calculator.