我有一个像137.57667565656这样的浮点数,但我想将它舍入到小数点后面只有两个尾随数字,就像新的浮点数一样是137.58.
到目前为止我试过这个:
(Math.round((value*100)/100)).toFixed(2).toString();
Run Code Online (Sandbox Code Playgroud)
但不幸的是,它将我的价值调整为137.00.它将小数位添加为零,为什么?
我怎样才能实现上述目标?
以下代码错误地针对人类:
double d = 0.7F;
System.out.println( d );
Run Code Online (Sandbox Code Playgroud)
打印价值:0.699999988079071
以下代码更好用:
double d = Double.valueOf( Float.toString( 0.7F ));
System.out.println( d );
Run Code Online (Sandbox Code Playgroud)
但是创建一个额外的String.没有额外的字符串,是否有更多的性能转换为float?
代码行很简单,只展示了问题.该计划更复杂.浮点值位于复杂模型的一部分中.格式化图层仅使用double.此外,DecimalFormat只接受double而不是float.
有没有办法抑制python舍入,例如:
>>> getcontext().prec = 11; print (Decimal(1.1237836550999999999)*10**10)
11237836551
Run Code Online (Sandbox Code Playgroud)
我需要显示十进制数的前十位小数,所以实际上我需要11237836550作为输出,我不需要在最后一位数上舍入(在这种情况下,0舍入为1).
有时我可以增加精度(不是在这种情况下),然后安全地执行计算,如下所示:
>>> getcontext().prec = 14; print (Decimal(1.12378365509978)*10**10)
11237836550.998
Run Code Online (Sandbox Code Playgroud)
但是假设你在'0'之后不知道数字的小数部分,例如它可能是1.123783655099999999999999999999999999 ......等等,那么你不能依赖这个'变通方法'.
那么,有没有办法告诉python,"对于这个计算,我不希望执行任何舍入,实际上我想要你只返回我需要的小数位数(在这个例子中为10),扔掉任何东西其他之后"?
我在这里看了一下Python中的截断浮点数,但基本上我需要的不是一个截断浮点数的字符串,而是用于执行计算的另一个小数.此外,在trunc我链接的帖子中接受的答案的功能在这种情况下不起作用,因为十进制将在它被传递到函数的'f'参数之前被舍入:
>>> def trunc(f, n):
... '''Truncates/pads a float f to n decimal places without rounding'''
... return ('%.*f' % (n + 1, f))[:-1]
...
>>> trunc(Decimal(1.12378365509978), 10)
'1.1237836551' # and not 1.1237836550 as needed
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?
int a, b, c = 0;
c = (a+b)/2;
Run Code Online (Sandbox Code Playgroud)
在这段代码中,如果"a"和"b"都是偶数(例1),则没有问题.但如果其中一个是奇数(例2),则答案将为+0.5.我想把它整理一下.
例1.
a = 4,b = 10
c将= 7这没关系.
例2.
a = 3,b = 4
c将= = 3.5 我希望c被四舍五入而成为4.
如何获得0.5的舍入数,之前我在此链接中找到:
点击这里
但这不是我想要的:
我想要这个例子:
jQuery对我很好.
我有一个javascript公式,使输入数字四舍五入number.
var number = x;
alert (Math.round(number / 10) * 10);
Run Code Online (Sandbox Code Playgroud)
这将输出11,12,13,14为10和15,16,17为20.
这不是我想要的; 我想添加1到10(11)并将其四舍五入,这将返回/打印20.
例:
我Math.Round(decimal d, int decimals)在C#中使用将小数舍入到指定的小数位数.我可以舍入到 15位小数,但是当我尝试舍入到16时,例如,我得到以下异常:
mscorlib.dll中出现未处理的"System.ArgumentOutOfRangeException"类型的异常附加信息:舍入数字必须介于0和15之间(包括0和15).
是否有任何方法可以舍入到更高的小数位数,也许没有使用Math.Round?
为了给出更多问题的背景知识,我正在计算非理性数学常数,例如'pi'和'e',并让用户指定要计算的小数位数.用于检查值和先前值是否与给定精度相同的布尔值如下:
Math.Round(valuePrevious, decPlaces) == Math.Round(valueCurrent, decPlaces)
Run Code Online (Sandbox Code Playgroud) 在MS SQL Server中,如果我
SELECT ROUND(9.4, 0), ROUND(8.6, 0), ROUND(10.6, 0)
Run Code Online (Sandbox Code Playgroud)
我不出所料得到:
9.0 9.0 11.0
Run Code Online (Sandbox Code Playgroud)
但如果我这样做
SELECT ROUND(9.6, 0)
Run Code Online (Sandbox Code Playgroud)
我明白了:
消息8115,级别16,状态2,行1算术溢出错误将表达式转换为数据类型数字.
我知道我可以CAST(9.6 as DECIMAL(10,0)),但这里发生了什么?
TIA
据我所知,双精度是MatLab的标准,但我想编写一个程序,找出最小的a(双精度),以便float(1 + a)> 1。是否有将双精度转换为单精度的功能?
在java中
如何舍入具有以下模式的值(float,bigdecimal或double),
(1)如果该值为1.0,即,如果小数以零开始,那么这不应四舍五入,该值应该是整数.即,在这种情况下为"1".
(2)如果值为1.1,即如果小数位数以大于0开头,则整数应舍入为下一个数字.即,如果1.1那么它应该是2.