GVKun编程网logo

java.math.MathContext的使用(java mathcontext)

13

此处将为大家介绍关于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)

java.math.MathContext的使用(java mathcontext)

最近,我尝试了解 java.math.MathContext
的用法,但未能正确理解。它用于四舍五入java.math.BigDecimal。如果是,为什么不四舍五入十进制数字,甚至尾数部分。

从API文档中,我知道它遵循,ANSI X3.274-1996ANSI X3.274-1996/AM1-2000规范中指定的标准,但是我没有让他们在线阅读。

如果您对此有任何想法,请告诉我。

答案1

小编典典

@贾坦

谢谢您的回答。这说得通。您能否在BigDecimal#round方法的上下文中向我解释MathContext。

BigDecimal.round() 其他BigDecimal方法 相比,
没有什么特别的。在所有情况下,均MathContext指定有效位数和舍入技术。基本上,每个元素都有两个部分MathContext。有精度,也有RoundingMode

精度再次指定有效位数。因此,如果您指定123一个数字,并要求输入2个有效数字,您将得到120。如果您以科学计数法来考虑,可能会更加清楚。

123将以1.23e2科学计数法表示。如果仅保留2个有效数字,则得到1.2e2120。通过减少有效数字的位数,我们降低了指定数字的精度。

RoundingMode部分指定了如何处理精度损失。要重用该示例,如果您将其123用作数字并要求输入2个有效数字,则降低了精度。带有RoundingModeHALF_UP(默认模式),123将变为120。用RoundingModeCEILING,你会得到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...

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的使用

android.text.DateFormat的使用

DateFormat.format(dateFormat, calendar)方法的使用:

关键是dateFormat这个字符串的格式:

在这个函数里,一般使用的格式是yyyy   MM  dd  hh  mm  ss。但是在这个方法里面,时间显示的永远是12小时制的。

如果需要显示24小时制的,把hh 换成kk即可。

asp.net – MathJax – 文件无法加载:/extensions/MathZoom.js

asp.net – MathJax – 文件无法加载:/extensions/MathZoom.js

我决定在我的一个网站项目中使用mathjax,我遇到了一个我无法理解的问题.

第一点:我创建了自己的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无法检测到自己的根目录,根据该目录解析其他文件URL,或者您实际上错过了extensions文件夹.

我被咬过的东西:主要的MathJax javascript文件无法重命名 – 它必须保留“whateverpath / MathJax.js”.重命名并尝试加载,由于未能检测到根路径“无论路径”,因此确切地说明了您提到的错误.

此外,您显然需要部署整个包,而不仅仅是MathJax主js文件.

最后,我注意到你在CDN上使用了1.1版本,并说你部署了2.0.这是故意的吗?

希望有所帮助.

AtCoder Context ABC 119- C - Synthetic Kadomatsu(比特运算解法)

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的竹竿子用下面的魔法得到

  1. 对长度为98的竹竿子,使用2次延长魔法,使其长度达到100(消耗MP:2)
  2. 对长度为30和40的竹竿子使用合成魔法,使其长度达到70(消耗MP:10)
  3. 对长度为21的竹竿子使用缩短魔法,使其长度达到20
  4. 使用合成魔法合唱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

名称未設定.001.jpeg

解题思路
这一题咋一看,怎么办啊。合成魔法也就是拼接,貌似可以抽象成排列组合的问题。但是延长魔法(+1),缩短魔法(-1)貌似不好抽象成数学问题。

1根竹竿子,只能用在A,B,C的其中一个上。如果一根竹竿子想用在A上,又用在B上是不可能的,因为没有分解魔法…………^^

这样想的话,每一根竹竿子的归属有属于A,属于B,属于C,3种归属,并且每一根竹竿子只有一个归属
名称未設定.002.jpeg

等一下,还有一种情况就是竹竿子没有被使用。因为题目条件没有说非得全部使用,也就是存在没有被使用的竹竿子的可能性。
名称未設定.003.jpeg

因此每一根竹竿子的归属有属于A,属于B,属于C,没有被使用,4种归属

那么N个竹竿子,所有的情况考虑进来的话,应该有4的N次方种情况。我们看一看条件,这里N最大是8。所以最多的情况是4的8次方,65536种情况。O(N)的复杂度的话,时间上是来得及。

如何遍历4的N次方的所有情况,这里我们用到改进版的比特运算
名称未設定.005.jpeg

那么每一种情况的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使用,可以看作最终对合成后的竹竿子使用。
所以我们先使用合成魔法拼接,然后再考虑用延长或者缩短魔法。
名称未設定.006.jpeg

A,B,C必须要有原材料,如果出现A,B,C没有原材料的情况,该情况不允许考虑
名称未設定.006.jpeg

代码
比特运算解法

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的方法。

※ 另外,我会在我的微信个人订阅号上推出一些文章,欢迎关注
二维码.jpg


今天关于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(比特运算解法)的相关知识,请在本站搜索。

本文标签: