此处将为大家介绍关于java.math.MathContext的使用的详细内容,并且为您解答有关javamathcontext的相关问题,此外,我们还将为您介绍关于AddDbContextwascal
此处将为大家介绍关于java.math.MathContext的使用的详细内容,并且为您解答有关java mathcontext的相关问题,此外,我们还将为您介绍关于AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...、android.text.DateFormat的使用、asp.net – MathJax – 文件无法加载:/extensions/MathZoom.js、AtCoder Context ABC 119- C - Synthetic Kadomatsu(比特运算解法)的有用信息。
本文目录一览:- java.math.MathContext的使用(java mathcontext)
- AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...
- android.text.DateFormat的使用
- asp.net – MathJax – 文件无法加载:/extensions/MathZoom.js
- AtCoder Context ABC 119- C - Synthetic Kadomatsu(比特运算解法)
java.math.MathContext的使用(java mathcontext)
最近,我尝试了解 java.math.MathContext
的用法,但未能正确理解。它用于四舍五入java.math.BigDecimal
。如果是,为什么不四舍五入十进制数字,甚至尾数部分。
从API文档中,我知道它遵循,ANSI X3.274-1996
和ANSI X3.274-1996/AM1-2000
规范中指定的标准,但是我没有让他们在线阅读。
如果您对此有任何想法,请告诉我。
答案1
小编典典@贾坦
谢谢您的回答。这说得通。您能否在BigDecimal#round方法的上下文中向我解释MathContext。
BigDecimal.round()
与 其他BigDecimal
方法 相比,
没有什么特别的。在所有情况下,均MathContext
指定有效位数和舍入技术。基本上,每个元素都有两个部分MathContext
。有精度,也有RoundingMode
。
精度再次指定有效位数。因此,如果您指定123
一个数字,并要求输入2个有效数字,您将得到120
。如果您以科学计数法来考虑,可能会更加清楚。
123
将以1.23e2
科学计数法表示。如果仅保留2个有效数字,则得到1.2e2
或120
。通过减少有效数字的位数,我们降低了指定数字的精度。
该RoundingMode
部分指定了如何处理精度损失。要重用该示例,如果您将其123
用作数字并要求输入2个有效数字,则降低了精度。带有RoundingMode
的HALF_UP
(默认模式),123
将变为120
。用RoundingMode
的CEILING
,你会得到130
。
例如:
System.out.println(new BigDecimal("123.4", new MathContext(4,RoundingMode.HALF_UP)));System.out.println(new BigDecimal("123.4", new MathContext(2,RoundingMode.HALF_UP)));System.out.println(new BigDecimal("123.4", new MathContext(2,RoundingMode.CEILING)));System.out.println(new BigDecimal("123.4", new MathContext(1,RoundingMode.CEILING)));
输出:
123.41.2E+21.3E+22E+2
您可以看到精度和舍入模式都会影响输出。
AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...
问题
An error occurred while starting the application.
ArgumentException: AddDbContext was called with configuration, but the context type ''NewsContext'' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used. If configuration is passed to AddDbContext, then ''NewsContext'' should declare a constructor that accepts a DbContextOptions<NewsContext> and must pass it to the base constructor for DbContext.
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.CheckContextConstructors<TContext>()
ArgumentException: AddDbContext was called with configuration, but the context type ''NewsContext'' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used. If configuration is passed to AddDbContext, then ''NewsContext'' should declare a constructor that accepts a DbContextOptions<NewsContext> and must pass it to the base constructor for DbContext.
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.CheckContextConstructors<TContext>()
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.AddDbContext<TContextService, TContextImplementation>(IServiceCollection serviceCollection, Action<IServiceProvider, DbContextOptionsBuilder> optionsAction, ServiceLifetime contextLifetime, ServiceLifetime optionsLifetime)
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.AddDbContext<TContextService, TContextImplementation>(IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, ServiceLifetime contextLifetime, ServiceLifetime optionsLifetime)
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.AddDbContext<TContext>(IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, ServiceLifetime contextLifetime, ServiceLifetime optionsLifetime)
News.Startup.ConfigureServices(IServiceCollection services) in Startup.cs
+
services.AddDbContext<NewsContext>(options =>
Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize()
Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
原因
NewsContext.cs
using Microsoft.EntityFrameworkCore;
namespace News.Service
{
public class NewsContext : DbContext
{
public DbSet<News.Model.Entity.News> News { get; set; }
public DbSet<News.Model.Entity.Banner> Banner { get; set; }
public DbSet<News.Model.Entity.Comment> Comment { get; set; }
public DbSet<News.Model.Entity.NewsClassify> NewsClassify { get; set; }
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
......
services.AddDbContext<NewsContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("MsSqlConnection"), db => db.UseRowNumberForPaging());
});
......
}
该错误表示,如果通过 AddDbContext 配置 NewsContext,那么需要添加一个 DbContextOptions<NewsContext> 类型参数的构造函数到 NewsContext 类。否则.net core 不能注入时带上 AddDbContext 添加的配置
解决方法
如上面所说,NewsContext 类添加一个 DbContextOptions<NewsContext> 类型参数的构造函数
using Microsoft.EntityFrameworkCore;
namespace News.Service
{
public class NewsContext : DbContext
{
public NewsContext(DbContextOptions<NewsContext> options) : base(options)
{
}
public DbSet<News.Model.Entity.News> News { get; set; }
public DbSet<News.Model.Entity.Banner> Banner { get; set; }
public DbSet<News.Model.Entity.Comment> Comment { get; set; }
public DbSet<News.Model.Entity.NewsClassify> NewsClassify { get; set; }
}
}
android.text.DateFormat的使用
DateFormat.format(dateFormat, calendar)方法的使用:
关键是dateFormat这个字符串的格式:
在这个函数里,一般使用的格式是yyyy MM dd hh mm ss。但是在这个方法里面,时间显示的永远是12小时制的。
如果需要显示24小时制的,把hh 换成kk即可。
asp.net – MathJax – 文件无法加载:/extensions/MathZoom.js
第一点:我创建了自己的CDN网站,其中我在某些网址上提供了2.0版本的mathjax:“http://mathjax.example.com”.
我的webapplication是在asp.net mvc3 razor中开发的,在我决定创建一个cdn网站之前,我使用的是标准脚本,它正在完美地工作:< script type =“text / javascript”src =“http:/ /cdn.mathjax.org/mathjax/1.1-latest/MathJax.js\”\u0026gt;\u0026lt;/script\u0026gt;
但是,外部CDN不能满足我的客户需求,因此我要在同一台服务器上创建一个cdn网站.
我已经下载了zip文件并安装在我的网络服务器上提供的目录中.
我的问题是,如果我将旧网址指向新网址:它不起作用,最后我在左下角的浏览器角落显示一条消息“文件无法加载:/extensions/MathZoom.js”
在某处需要一些配置吗?
解决方法
我被咬过的东西:主要的MathJax javascript文件无法重命名 – 它必须保留“whateverpath / MathJax.js”.重命名并尝试加载,由于未能检测到根路径“无论路径”,因此确切地说明了您提到的错误.
此外,您显然需要部署整个包,而不仅仅是MathJax主js文件.
最后,我注意到你在CDN上使用了1.1版本,并说你部署了2.0.这是故意的吗?
希望有所帮助.
AtCoder Context ABC 119- C - Synthetic Kadomatsu(比特运算解法)
运行要求
运行时间限制: 2sec
内存限制: 1024MB
原文链接
题目
你有N根竹竿子,这N根竹竿子的长度依次为l1,l2,l3..lN(单位是厘米)
你的任务是,从N根竹竿子里面选择一些竹竿子(全部选择也可以),用这些选出来的竹竿子,制作长度为A,B,C的3根竹竿子。为了完成这项任务,赋予你3种魔法。你可以任意使用这三种魔法,使用次数任意。
- 延长魔法:消耗1MP(魔法值),选择一根竹竿子,使它的长度增加1
- 缩短魔法:消耗1MP(魔法值),选择一根长度为2以上的竹竿子,使它的长度减少1
- 合成魔法:消耗10MP(魔法值),选择两根竹竿子,把它合成一根竹竿子。新的竹竿子是两根竹竿子的长度的和。(使用合成魔法合成的竹竿子同样可以使用其他魔法)
为了完成你的任务,你至少需要消耗多少MP?
输入前提条件
- 3<=N<=8
- 1<=C<B<A<=1000
- 1<=li<=1000
- 输入的所有的值为整数
输入
输入都以以下标准从命令行输入
N A B C
l1
l2
l3
.
.
.
lN
输出
输出需要的最少的魔法值
例1
输入
5 100 90 80
98
40
30
21
80
输出
23
从5根长度分别是98,40,30,21,80的竹竿子里制作长度为100,90,80的3根竹竿子
我们已经有长度为80的竹竿子,长度为90,100的竹竿子用下面的魔法得到
- 对长度为98的竹竿子,使用2次延长魔法,使其长度达到100(消耗MP:2)
- 对长度为30和40的竹竿子使用合成魔法,使其长度达到70(消耗MP:10)
- 对长度为21的竹竿子使用缩短魔法,使其长度达到20
- 使用合成魔法合唱2得到的70和3得到的20,合成长度为90的竹竿子
例2
输入
8 100 90 80
100
100
90
90
90
80
80
80
输出
0
已经准备好的竹竿子里面已经含有任务需要的竹竿子的话,我们不必使用魔法。
例3
输入
8 1000 800 100
300
333
400
444
500
555
600
666
输出
243
读懂题目
用一个数列ARR,里面有N个数。用这N个数,进行+1,-1,两两相加的方法,拼凑A,B,C。求最少的代价的方法。
+1,-1的代价是1
两两相加的方法的代价是10
解题思路
这一题咋一看,怎么办啊。合成魔法也就是拼接,貌似可以抽象成排列组合的问题。但是延长魔法(+1),缩短魔法(-1)貌似不好抽象成数学问题。
1根竹竿子,只能用在A,B,C的其中一个上。如果一根竹竿子想用在A上,又用在B上是不可能的,因为没有分解魔法…………^^
这样想的话,每一根竹竿子的归属有属于A,属于B,属于C,3种归属,并且每一根竹竿子只有一个归属
等一下,还有一种情况就是竹竿子没有被使用。因为题目条件没有说非得全部使用,也就是存在没有被使用的竹竿子的可能性。
因此每一根竹竿子的归属有属于A,属于B,属于C,没有被使用,4种归属
那么N个竹竿子,所有的情况考虑进来的话,应该有4的N次方种情况。我们看一看条件,这里N最大是8。所以最多的情况是4的8次方,65536种情况。O(N)的复杂度的话,时间上是来得及。
如何遍历4的N次方的所有情况,这里我们用到改进版的比特运算
那么每一种情况的MP如何求到呢。比如N=6,有6根竹竿子。
第1,2,3根竹竿子用来制作A,
4,5用来制作B,
6用来制作C
制作A所需要的MP是2次合成,然后A的长度-(1,2,3)的长度的和的绝对值
制作B所需要的MP是1次合成,然后A的长度-(4,5)的长度的和的绝对值
制作C所需要的MP是0次合成,然后A的长度-(6)的长度的和的绝对值
这一点细想就能知道
1,2,3都用开制作A的情况下,延长魔法对1使用或是对2使用,可以看作最终对合成后的竹竿子使用。
所以我们先使用合成魔法拼接,然后再考虑用延长或者缩短魔法。
A,B,C必须要有原材料,如果出现A,B,C没有原材料的情况,该情况不允许考虑
代码
比特运算解法
import math
N,A,B,C = map(int,input().split())
ARR = []
for i in range(N):
ARR.append(int(input()))
def calculate(n, arr, a, b, c):
result = []
for i in range(4 ** n):
materialA = set()
materialB = set()
materialC = set()
materialNone = set()
for j in range(n):
s = (i >> 2 * j & 1)
t = (i >> (2 * j + 1) & 1)
if (s == 0) and (t == 0):
materialA.add(j)
if (s == 1) and (t == 0):
materialB.add(j)
if (s == 0) and (t == 1):
materialC.add(j)
if (s == 1) and (t == 1):
materialNone.add(j)
ok, mp = judge(n, arr, a, b, c, materialA, materialB, materialC, materialNone)
if ok:
result.append(mp)
print(int(min(result)))
def judge(n, arr, a, b, c, materialA, materialB, materialC, materialNone):
if materialNone == n:
return False, -1
if len(materialA) == 0:
return False, -1
if len(materialB) == 0:
return False, -1
if len(materialC) == 0:
return False, -1
mpA = 0
a = a - calculateResult(arr,materialA)
mpA += math.fabs(a)
if len(materialA) > 1:
mpA += 10 * (len(materialA) - 1)
mpB = 0
b = b - calculateResult(arr,materialB)
mpB += math.fabs(b)
if len(materialB) > 1:
mpB += 10 * (len(materialB) - 1)
mpC = 0
c = c - calculateResult(arr,materialC)
mpC += math.fabs(c)
if len(materialC) > 1:
mpC += 10 * (len(materialC) - 1)
return True,mpA+mpB+mpC
def calculateResult(arr,material):
result = 0
for m in material:
result = result + arr[m]
return result
calculate(N, ARR, A, B, C)
dfs解法
import math
N, A, B, C = map(int, input().split())
ARR = []
for i in range(N):
ARR.append(int(input()))
result = []
def dfs(deep, crr):
if deep == N:
ok, res = calculate(crr)
if ok:
result.append(int(res))
else:
for i in range(4):
crr[deep] = i
dfs(deep + 1, crr)
def calculate(crr):
sA = []
sB = []
sC = []
sN = []
for index, cr in enumerate(crr):
if cr == 0:
sN.append(ARR[index])
if cr == 1:
sA.append(ARR[index])
if cr == 2:
sB.append(ARR[index])
if cr == 3:
sC.append(ARR[index])
if len(sA) == 0:
return False, -1
if len(sB) == 0:
return False, -1
if len(sC) == 0:
return False, -1
s1 = (len(sA) - 1) * 10 + math.fabs(sum(sA) - A)
s2 = (len(sB) - 1) * 10 + math.fabs(sum(sB) - B)
s3 = (len(sC) - 1) * 10 + math.fabs(sum(sC) - C)
return True, s1 + s2 + s3
dfs(0, [0 for i in range(N)])
print(min(result))
总结
这里考察了如何把魔法问题抽象成排列组合的数学问题的思维
另外对于如何遍历4的N次方的情况的方法也进行了考察
遍历的方法这里用到了比特运算。还有DFS的方法。
※ 另外,我会在我的微信个人订阅号上推出一些文章,欢迎关注
今天关于java.math.MathContext的使用和java mathcontext的讲解已经结束,谢谢您的阅读,如果想了解更多关于AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...、android.text.DateFormat的使用、asp.net – MathJax – 文件无法加载:/extensions/MathZoom.js、AtCoder Context ABC 119- C - Synthetic Kadomatsu(比特运算解法)的相关知识,请在本站搜索。
本文标签: