我正在使用VS2008并且我已经包含math.h但我仍然找不到圆函数.它存在吗?
我在google上看到一堆"添加0.5并转换为int"解决方案.这是最好的做法吗?
我一直在使用来自SQL Decimal(38,30)的C#中的十进制精度,我终于把它变成了一个舍入奇怪的东西.我知道我可能会忽视这里显而易见的事情,但我需要一点见解.
我遇到的问题是C#没有产生我认为是一致输出的东西.
decimal a = 0.387518769125m;
decimal b = 0.3875187691250002636113061835m;
Console.WriteLine(Math.Round(a, 11));
Console.WriteLine(Math.Round(b, 11));
Console.WriteLine(Math.Round(a, 11) == Math.Round(b, 11));
Run Code Online (Sandbox Code Playgroud)
产量
0.38751876912
0.38751876913
False
Run Code Online (Sandbox Code Playgroud)
嗯,0.38751876913?真?我在这里错过了什么?
来自MSDN:
如果小数位的数字是奇数,则将其更改为偶数.否则,它保持不变.
为什么我看到不一致的结果?额外的精度不会改变'小数位数'......
可能重复:
PHP Round函数 - 最高可达2 dp?
我的问题是:
当我使用
ceil(3.6451895227869);
Run Code Online (Sandbox Code Playgroud)
我喜欢
4
Run Code Online (Sandbox Code Playgroud)
但我想要
3.65
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
UPDATE
Run Code Online (Sandbox Code Playgroud)
请记住:这应该像圆形时一样圆形到圆柱形
3.6333333333333
它不能是3.63但应该是3.64
我知道在浮点运算中会发生舍入错误,但有人可以解释这个问题的原因:
>>> 8.0 / 0.4 # as expected
20.0
>>> floor(8.0 / 0.4) # int works too
20
>>> 8.0 // 0.4 # expecting 20.0
19.0
Run Code Online (Sandbox Code Playgroud)
这在x64上的Python 2和3上都会发生.
据我所知,这是一个错误或非常愚蠢的规范,//因为我没有看到为什么最后一个表达式应该评估的原因19.0.
为什么a // b不简单定义为floor(a / b)?
编辑:8.0 % 0.4也评估为0.3999999999999996.至少这是因为随后8.0 // 0.4 * 0.4 + 8.0 % 0.4评估的结果8.0
编辑:这不是浮点数学的重复吗?因为我问为什么这个特定的操作受到(可能是可以避免的)舍入错误的影响,以及为什么a // b没有定义为/等于floor(a / b)
备注:我猜这个不起作用的深层原因是地板划分是不连续的,因此具有无限的条件数使其成为一个不适定的问题.地板划分和浮点数简单地基本上是不兼容的,你永远不应该使用//浮点数.只需使用整数或分数.
在c#中有一个简单的方法可以将小数舍入到最接近的四分之一iex0,x.25,x.50 x.75,例如0.21将舍入到0.25,5.03将舍入到5.0
在此先感谢您的帮助.
我有一个双值= 1.068879335我想用它只有两个十进制值,如1.07.
我试过这样的
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value);
double finalValue = Double.parseDouble(formate) ;
Run Code Online (Sandbox Code Playgroud)
这给了我以下例外情况
java.lang.NumberFormatException: For input string: "1,07"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
Run Code Online (Sandbox Code Playgroud)
可以有人告诉我我的代码有什么问题.
最后我需要finalValue = 1.07;
我想设置两个BigDecimal数字a和b.如在这个例子中:
BigDecimal a = new BigDecimal("2.6E-1095");
BigDecimal b = new BigDecimal("2.7E-1105");
int i = 112, j=1;
BigDecimal aa = a.setScale(i+j);
BigDecimal bb = b.setScale(i+j);
Run Code Online (Sandbox Code Playgroud)
当我运行时,我有这个例外:
java.lang.ArithmeticException: Rounding necessary
at java.math.BigDecimal.divideAndRound(BigDecimal.java:1439)
at java.math.BigDecimal.setScale(BigDecimal.java:2394)
at java.math.BigDecimal.setScale(BigDecimal.java:2437)
Run Code Online (Sandbox Code Playgroud)
为什么需要舍入?如果我不想解决,请问什么是解决方案?
谢谢
我发现DecimalFormatjava 7和java 8之间的类舍入不一致.这是我的测试用例:
import java.text.DecimalFormat;
public class DecimalFormatTest {
public static void main(String[] args) {
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
format.setDecimalSeparatorAlwaysShown(true);
format.setMinimumFractionDigits(1);
format.setMaximumFractionDigits(1);
System.out.println(format.format(83.65));
}
}
Run Code Online (Sandbox Code Playgroud)
在Java(TM)SE运行时环境(版本1.7.0_51-b13)中,输出为:
83.6
Run Code Online (Sandbox Code Playgroud)
在Java(TM)SE运行时环境(版本1.8.0-b132)中,输出为:
83.7
Run Code Online (Sandbox Code Playgroud)
这是一个回归错误吗?或者随着Java 8的发布,舍入规则发生了变化?
如果我得到数字46,我想要四舍五入到最近的十.我怎么能在python中做到这一点?
46到50.
在使用round()函数时,我注意到我得到了两个不同的结果,具体取决于我是否没有明确选择要包含的小数位数或选择数字为0.
x = 4.1
print(round(x))
print(round(x, 0))
Run Code Online (Sandbox Code Playgroud)
它打印以下内容:
4
4.0
Run Code Online (Sandbox Code Playgroud)
有什么不同?
rounding ×10
java ×3
python ×3
c# ×2
python-3.x ×2
bigdecimal ×1
c++ ×1
ceil ×1
decimal ×1
double ×1
numbers ×1
php ×1
python-2.7 ×1