标签: rounding

将BigDecimal舍入为*always*有两个小数位

我正在尝试将BigDecimal值向上舍入到小数点后两位.

我正在使用

BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING));
logger.trace("rounded {} to {}", value, rounded);
Run Code Online (Sandbox Code Playgroud)

但它不能始终如一地做我想做的事:

rounded 0.819 to 0.82
rounded 1.092 to 1.1
rounded 1.365 to 1.4 // should be 1.37
rounded 2.730 to 2.8 // should be 2.73
rounded 0.819 to 0.82
Run Code Online (Sandbox Code Playgroud)

我不关心有效数字,我只想要两位小数.我如何使用BigDecimal执行此操作?或者是否有另一个类/库更适合这个?

java math rounding bigdecimal

198
推荐指数
1
解决办法
18万
查看次数

在SQL Server中截断(不舍入)小数位

我正在尝试确定在SQL中截断或删除额外小数位的最佳方法,而不进行舍入.例如:

declare @value decimal(18,2)

set @value = 123.456
Run Code Online (Sandbox Code Playgroud)

这将自动围绕@Value为123.46 ....这在大多数情况下是好的.但是,对于这个项目,我不需要那样做.是否有一种简单的方法来截断我不需要的小数?我知道我可以使用left()函数并转换回小数......还有其他方法吗?

sql t-sql sql-server rounding

184
推荐指数
9
解决办法
61万
查看次数

如何用Python舍入到2位小数?

我在这段代码的输出中得到了很多小数(华氏温度到摄氏温度转换器).

我的代码目前看起来像这样:

def main():
    printC(formeln(typeHere()))

def typeHere():
    global Fahrenheit
    try:
        Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
    except ValueError:
        print "\nYour insertion was not a digit!"
        print "We've put your Fahrenheit value to 50!"
        Fahrenheit = 50
    return Fahrenheit

def formeln(c):
    Celsius = (Fahrenheit - 32.00) * 5.00/9.00
    return Celsius

def printC(answer):
    answer = str(answer)
    print "\nYour Celsius value is " + answer + " C.\n"



main()
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何使程序围绕小数点后两位的每个答案?

python rounding

179
推荐指数
14
解决办法
50万
查看次数

如何使舍入百分比加起来达到100%

考虑下面的四个百分比,表示为float数字:

    13.626332%
    47.989636%
     9.596008%
    28.788024%
   -----------
   100.000000%
Run Code Online (Sandbox Code Playgroud)

我需要将这些百分比表示为整数.如果我只是使用Math.round(),我最终总共有101%.

14 + 48 + 10 + 29 = 101
Run Code Online (Sandbox Code Playgroud)

如果我使用parseInt(),我最终总共有97%.

13 + 47 + 9 + 28 = 97
Run Code Online (Sandbox Code Playgroud)

什么是一个很好的算法来表示任意数量的百分比作为整数,同时仍然保持总计100%?


编辑:在阅读了一些评论和答案后,显然有很多方法可以解决这个问题.

在我看来,为了忠实于数字,"正确"的结果是最小化整体错误的结果,由相对于实际值引入的错误舍入量来定义:

        value  rounded     error               decision
   ----------------------------------------------------
    13.626332       14      2.7%          round up (14)
    47.989636       48      0.0%          round up (48)
     9.596008       10      4.0%    don't round up  (9)
    28.788024       29      2.7%          round up (29)
Run Code Online (Sandbox Code Playgroud)

在平局(3.33,3.33,3.33)的情况下,可以做出任意决定(例如3,4,3).

algorithm math rounding percentage

173
推荐指数
7
解决办法
8万
查看次数

你如何围绕Perl中的浮点数?

如何将十进制数(浮点)舍入到最接近的整数?

例如

1.2 = 1
1.7 = 2
Run Code Online (Sandbox Code Playgroud)

floating-point perl rounding

168
推荐指数
5
解决办法
33万
查看次数

如何将浮点数舍入到jruby中的两个小数位

JRuby 1.6.x. 如何将浮点数舍入到jruby中的小数位数.

number = 1.1164
number.round(2)

The above shows the following error
wrong number of arguments (1 for 0)
Run Code Online (Sandbox Code Playgroud)

如何将其舍入到2位小数?

ruby jruby rounding

163
推荐指数
4
解决办法
21万
查看次数

如何通过除以两个整数值来获得浮点结果?

当我在2个整数之间进行除法时,我想指定小数位数,如:

select 1/3
Run Code Online (Sandbox Code Playgroud)

目前返回0.我希望它能回来0,33.

就像是:

select round(1/3, -2)
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我怎样才能达到预期的效果?

sql-server rounding division sql-server-2008

159
推荐指数
6
解决办法
27万
查看次数

Python 3.x舍入行为

我刚刚重新阅读Python 3.0中的新功能,它指出:

round()函数舍入策略和返回类型已更改.确切的中途情况现在四舍五入到最接近的偶数结果而不是零.(例如,round(2.5)现在返回2而不是3.)

圆形文件:

对于支持round()的内置类型,值被舍入到10的最接近的倍数到幂减去n; 如果两个倍数相等,则向均匀选择进行舍入

所以,在v2.7.3下:

In [85]: round(2.5)
Out[85]: 3.0

In [86]: round(3.5)
Out[86]: 4.0
Run Code Online (Sandbox Code Playgroud)

正如我所料.但是,现在在v3.2.3下:

In [32]: round(2.5)
Out[32]: 2

In [33]: round(3.5)
Out[33]: 4
Run Code Online (Sandbox Code Playgroud)

这似乎是违反直觉的,与我对四舍五入的理解相反(并且必然会绊倒人).英语不是我的母语,但在我读到这篇文章之前,我以为我知道舍入的含义是什么: - /我确信在引入v3的时候一定有一些关于这个的讨论,但是我无法找到一个很好的理由我的搜索.

  1. 有没有人能够深入了解为什么会改变这种情况?
  2. 有没有其他主流编程语言(例如,C,C++,Java,Perl, ..)这样做(对我不一致)舍入?

我在这里错过了什么?

更新:@ Li-aungYip的评论"银行家的舍入"给了我正确的搜索词/搜索关键字,我发现了这个问题:为什么.NET使用银行家的舍入作为默认值?所以我会仔细阅读.

python rounding python-3.x

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

如何在Javascript中舍入一个数字?

我想使用Javascript来舍入一个数字.由于这个数字是货币,我希望它像这些例子一样向上舍入(2个小数点):

  • 192.168 => 192.20
  • 192.11 => 192.20
  • 192.21 => 192.30
  • 192.26 => 192.30
  • 192.20 => 192.20

如何使用Javascript实现这一目标?内置的Javascript函数将根据标准逻辑(小于和大于5)向上舍入数字.

javascript rounding

156
推荐指数
4
解决办法
17万
查看次数

C++:向上舍入到最接近的数字的倍数

好的 - 我几乎不好意思在这里张贴这个(如果有人投票结束我会删除),因为这似乎是一个基本问题.

这是在C++中舍入到数字的倍数的正确方法吗?

我知道还有其他与此相关的问题,但我特别感兴趣的是知道在C++中执行此操作的最佳方法是什么:

int roundUp(int numToRound, int multiple)
{
 if(multiple == 0)
 {
  return numToRound;
 }

 int roundDown = ( (int) (numToRound) / multiple) * multiple;
 int roundUp = roundDown + multiple; 
 int roundCalc = roundUp;
 return (roundCalc);
}
Run Code Online (Sandbox Code Playgroud)

更新:对不起我可能没有明确意图.这里有些例子:

roundUp(7, 100)
//return 100

roundUp(117, 100)
//return 200

roundUp(477, 100)
//return 500

roundUp(1077, 100)
//return 1100

roundUp(52, 20)
//return 60

roundUp(74, 30)
//return 90
Run Code Online (Sandbox Code Playgroud)

编辑:感谢所有的回复.这是我的目的:

int roundUp(int numToRound, int multiple)
{
 if(multiple == 0)
 {
  return numToRound;
 } …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm rounding

155
推荐指数
9
解决办法
11万
查看次数