精华内容
下载资源
问答
  • 您可以将minimumFractionDigits设置为0.像这样:public class Test {public static void main(String[] args) {System.out.println(format(14.0184849945)); // prints '14.01'System.out.println(format(13));...

    您可以将minimumFractionDigits设置为0.像这样:

    public class Test {

    public static void main(String[] args) {

    System.out.println(format(14.0184849945)); // prints '14.01'

    System.out.println(format(13)); // prints '13'

    System.out.println(format(3.5)); // prints '3.5'

    System.out.println(format(3.138136)); // prints '3.13'

    }

    public static String format(Number n) {

    NumberFormat format = DecimalFormat.getInstance();

    format.setRoundingMode(RoundingMode.FLOOR);

    format.setMinimumFractionDigits(0);

    format.setMaximumFractionDigits(2);

    return format.format(n);

    }

    }

    展开全文
  • 首先它不理解非点小数分隔,所以我不得不使用它:std::replace(sSource.begin(), sSource.end(), getDecimalSeparator(), '.');但是,我没有发现另一个问题,也没有找到解决方法.如果值为负且千位分隔是一个点(“....

    我发现strtod方法存在问题,我一直用这个方法.

    首先它不理解非点小数分隔符,所以我不得不使用它:

    std::replace(sSource.begin(), sSource.end(), getDecimalSeparator(), '.');

    但是,我没有发现另一个问题,也没有找到解决方法.如果值为负且千位分隔符是一个点(“.”),则strtod返回0并且_EndPtr指向字符串的开头:

    // PRECONDITIONS:

    // * digit grouping symbol (thousands separator) = "."

    // * decimal symbol = ","

    // * digital grouping = "123.456.789"

    // * negative sign symbol = "-"

    // * negative number format = "- 1,1"

    // * OS WinXP SP2

    // * the rest doesn't matter

    double parse(const char* cszValue, char** szStop)

    {

    // NOTE: error handling code has been removed to simplify the sample

    return strtod(sSource.c_str(), szStop);

    }

    //...

    char* szStop = NULL;

    double dVal = 0.0;

    dVal = parse("123.45", &szStop); // works!

    // All the next DON'T WORK!

    dVal = parse("123,45", &szStop); // dVal == 123.0 szStop == ",45"

    dVal = parse("- 123.45", &szStop); // dVal == 0.0 szStop == "- 123.45"

    // the same for "- 123,45"

    dVal = parse("1.123.45", &szStop); // dVal == 1.123 szStop == ".45"

    // the same for "1.123,45"

    dVal = parse("1 123.45", &szStop); // dVal == 1 szStop == " 123.45"

    // the same for "1 123,45"

    dVal = parse("- 1 123,45", &szStop); // dVal == 0 szStop == start of the string

    // the same for "- 1 123.45", "- 1.123,45", "- 1.123.45"

    有问题:

    >我做错了什么? (回答)

    >如果根据本地设置格式化小数分隔符,为什么strtod会失败? (回答)

    >即使我用一个点(“.”)替换当前的小数点分隔符并删除所有千位分隔符,如何解析一个负值?检测否定唱,删除它,将值解析为正数并在此之后反转负号?

    展开全文
  • 跟随这个问题,我正在研究Matlab中变量的精度。 在那里,建议使用fprintf更仔细地查看变量。奇怪的是,变量编辑器和fprintf显示的结果不同,fprintf显示的结果多一位。% piVariable Editor: 3.141592653589793...

    跟随这个问题,我正在研究Matlab中双变量的精度。 在那里,建议使用fprintf更仔细地查看变量。

    奇怪的是,变量编辑器和fprintf显示的结果不同,fprintf显示的结果多一位。

    % pi

    Variable Editor:       3.141592653589793

    fprintf('0.16f

    ',pi): 3.1415926535897931

    vpa('pi'):             3.1415926535897932384626433832795

    % pi / 180

    pi180 = pi/180

    Variable Editor (pi180)      0.017453292519943

    fprintf('%0.16f

    ',pi180)    0.0174532925199433

    vpa('pi/180')                0.017453292519943295769236907684886

    在内部,Matlab似乎在以fprintf打印的精度工作

    >> fprintf('%0.16f

    ',0.0174532925199433*10) % value from fprintf

    0.1745329251994330

    >> fprintf('%0.16f

    ',0.017453292519943*10)  % value from Variable Editor

    0.1745329251994300

    >> fprintf('%0.16f

    ',pi180*10)              % internal calculation

    0.1745329251994330

    为什么会这样?

    如果在函数中使用预先计算的pi/180,是否应该使用fprintf或变量编辑器中的值?

    tl; dr在变量编辑器中,Matlab截断了15位而不是16位。

    我已经通过双击变量编辑器访问了变量。 这样,与指定的short格式相比,显示的位数更多。 AFAIK无法更改"双击输出"的精度。

    tl; dr MATLAB中的变量使用双精度。命令窗口和变量编辑器中的变量使用相同的精度。唯一的区别是显示格式和打印精度的小数位数。

    好。

    默认情况下,MATLAB对其变量使用双精度。 MATLAB中的这些变量存储在工作区中。"命令窗口"和"变量编辑器"都从相同的工作区提取变量,因此在下面使用相同的精度。

    好。

    在变量编辑器和命令窗口中显示变量的默认格式为short格式。您可以使用以下命令检查"命令窗口"

    好。

    >> get(0, 'format')

    ans =

    short

    对于变量编辑器,请转到Preferences -> Variables -> Format。默认情况下,short格式将变量显示为小数点后4位。

    好。

    在我看来,您已将变量编辑器中变量的默认显示格式更改为long格式。此格式显示精度为小数点后15位的双精度变量。 long和short格式都对变量进行舍入,因此pi的pi由于使用short格式显示时由于小数点后第五位的9而被舍入为3.1416。

    好。

    >> format short

    >> pi

    ans =

    3.1416

    这直接等效于fprintf产生的输出

    好。

    >> fprintf(1, '%.4f

    ', pi);

    3.1416

    但是,我猜测long格式已设置为变量编辑器的默认值,并四舍五入到小数点后15位,因此显示

    好。

    >> format long

    >> pi

    ans =

    3.141592653589793

    直接等于

    好。

    >> fprintf(1, '%.15f

    ', pi);

    3.141592653589793

    使用fprintf(1, '%.16f

    ', pi);时,会将pi打印到16位小数位,而不是long格式指定的15位。这就是为什么你的输出是

    好。

    >> fprintf(1, '%.16f

    ', pi);

    3.1415926535897931

    请注意,此末尾的1。这就是在变量编辑器中显示时,紧接其前的3不舍入为4的原因。

    好。

    摘要

    默认情况下,MATLAB中的变量使用双精度

    MATLAB变量存储在工作区中

    命令窗口和变量编辑器中可用的变量都来自工作区,并且使用相同的精度

    好。

    预先计算的值

    在MATLAB中,应在函数调用中或在处理其他数字数据时使用变量名称pi180。这将使用双精度,并消除使用fprintf或在变量编辑器中输出的值可能引起的任何复制和粘贴错误。

    好。

    fprintf古怪

    tl; dr MATLAB的short和long格式根据最适合的输入方法在%d,%.f,%.g和%.e说明符之间切换。

    好。

    @horchler指出,对于特定输入,%.f仅直接等同于short和long格式,这是正确的。 fprintf与MATLAB的short和long格式之间的所有输入都没有直接等效的形式。

    好。

    例如,让我们看一下eps和100.5并尝试打印与MATLAB的short和long格式完全相同的数字。

    好。

    >> format short

    >> eps

    ans =

    2.2204e-16

    >> 100.5

    ans =

    100.5000

    好。

    >> format long

    >> eps

    ans =

    2.220446049250313e-16

    >> 100.5

    ans =

    1.005000000000000e+02

    现在我们从上面知道fprintf(1, '%.4f

    ', pi);和fprintf(1, '%.15f

    ', pi);分别直接等同于pi的short和long,但它们分别是eps和100.5

    好。

    >> fprintf(1, '%.4f

    ', eps);

    0.0000

    >> fprintf(1, '%.15f

    ', eps);

    0.000000000000000

    >> fprintf(1, '%.4f

    ', 100.5);

    100.5000

    >> fprintf(1, '%.15f

    ', 100.5);

    100.500000000000000

    不,它们不是唯一的直接等效项是fprintf(1, '%.4f

    ', 100.5);。如果我们尝试使用%.g怎么办?

    好。

    >> fprintf(1, '%.4g

    ', eps);

    2.22e-16

    >> fprintf(1, '%.15g

    ', eps);

    2.22044604925031e-16

    >> fprintf(1, '%.4g

    ', 100.5);

    100.5

    >> fprintf(1, '%.15g

    ', 100.5);

    100.5

    现在,fprintf语句都没有直接等效的语句。但是,我们可以使用long格式为eps直接产生等价物

    好。

    >> fprintf(1, '%.16g

    ', eps);

    2.220446049250313e-16

    因为%g格式说明符在.之后的数字指定了有效位数(包括小数点.之前的位数),我们需要使用16而不是15。

    好。

    为了对short格式的所有这些输入类型产生直接等效的结果,我们需要混合使用%.f,%.g和%.e说明符并调整字段宽度。

    好。

    >> format short

    >> pi

    ans =

    3.1416

    >> eps

    ans =

    2.2204e-16

    >> 100.5

    ans =

    100.5000

    >> fprintf(1, '%.4f

    ', pi);

    3.1416

    >> fprintf(1, '%.5g

    ', eps);

    2.2204e-16

    >> fprintf(1, '%.4f

    ', 100.5);

    100.5000

    一点也不小。对于long格式,可以执行相同的操作。

    好。

    >> format long

    >> pi

    ans =

    3.141592653589793

    >> eps

    ans =

    2.220446049250313e-16

    >> 100.5

    ans =

    1.005000000000000e+02

    >> fprintf(1, '%.15f

    ', pi);

    3.141592653589793

    >> fprintf(1, '%.16g

    ', eps);

    2.220446049250313e-16

    >> fprintf(1, '%.15e

    ', 100.5);

    1.005000000000000e+02

    比short格式还要糟糕。

    好。

    简而言之,MATLAB的short和long格式根据最合适的输入方法在%d,%.f,%.g和%.e说明符之间切换。

    好。

    附加阅读

    您可以通过format文档找到有关MATLAB中可用的不同显示格式的信息。关于数字值的显示格式,还有一个有用的文档。最后,还有有关变量编辑器及其首选项的信息。

    好。

    好。

    因此,没有fprintf,就无法在工作空间或变量编辑器中以全精度显示双变量。 :)

    精度超过15位小数。

    您的fprintf示例仅对一系列值"直接等效"。 %g选项需要用于一般情况,即使如此,我不确定Matlab打印的内容是否仅基于此。

    @horchler您是正确的,我的示例仅对特定值直接等效。 %g选项虽然不涵盖一般情况。 MATLAB short和long格式在%d,%.f,%.g和%.e之间交替,具体取决于输入。 香港专业教育学院更新了答案,以反映这一点。

    展开全文
  • I'm trying to format some numbers in a Java program. The numbers will be both doubles and integers. When handling doubles, I want to keep only two decimal points but when handling integers I want the ...

    I'm trying to format some numbers in a Java program. The numbers will be both doubles and integers. When handling doubles, I want to keep only two decimal points but when handling integers I want the program to keep them unaffected. In other words:

    Doubles - Input

    14.0184849945

    Doubles - Output

    14.01

    Integers - Input

    13

    Integers - Output

    13 (not 13.00)

    Is there a way to implement this in the same DecimalFormat instance? My code is the following, so far:

    DecimalFormat df = new DecimalFormat("#,###,##0.00");

    DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.ENGLISH);

    otherSymbols.setDecimalSeparator('.');

    otherSymbols.setGroupingSeparator(',');

    df.setDecimalFormatSymbols(otherSymbols);

    解决方案

    You can just set the minimumFractionDigits to 0. Like this:

    public class Test {

    public static void main(String[] args) {

    System.out.println(format(14.0184849945)); // prints '14.01'

    System.out.println(format(13)); // prints '13'

    System.out.println(format(3.5)); // prints '3.5'

    System.out.println(format(3.138136)); // prints '3.13'

    }

    public static String format(Number n) {

    NumberFormat format = DecimalFormat.getInstance();

    format.setRoundingMode(RoundingMode.FLOOR);

    format.setMinimumFractionDigits(0);

    format.setMaximumFractionDigits(2);

    return format.format(n);

    }

    }

    展开全文
  • C语言输入输出格式符

    2021-05-19 13:00:06
    C语言输入输出格式符printf函数(格式输出函数)1.一般格式printf(格式控制,输出表列)例如:printf("i=%d,ch=%c\n",i,ch);说明:(1)“格式控制”是用撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息:...
  • c语言格式控制

    2021-05-19 15:39:42
    http://zhidao.baidu.com/link?url=-YJjz3U0fd_eSW9eLa8ankGo_QbyOOOaKYWyAY9g4mKWQj0DN6l12OSLJz24U8jCwo18MiBCzwpkFLoDM02yv_printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略...
  • 因为JS数字不区别整数与浮点数,只有Number类型,即都是浮点数,它采用IEEE 754标准的64位双精度格式(如果是索引数字则是32位单精度 )。 IEEE 754 的双精度 IEEE 754 标准为IEEE二进位浮点数算术标准,是由美国...
  • 【判断题】puts不需要格式控制,且自动换行。()A.正确B.错误【单选题】在c语言中,输出一个整型变量用的下面哪一种格式控制A.%cB.%dC.%f【单选题】以下各项,不属于printf()函数的格式控制的是_______。A.%cB.%...
  • C语言的格式控制

    2021-03-15 10:35:57
    1. 格式控制符格式输出printf 作用是向终端输出若干个类型任意的数据。格式:printf (格式控制符,输出列表)1) 格式控制符l % 格式说明引导符。l - 指定左对齐输出。l 0 指定空位填零。l m.n 指定输出域宽度及...
  • JAVA和C#在占位方面有些区别,C#提供的占位是用{num}这种形式,Java需要用%s这种形式,不太习惯,经查发现MessageFormat提供了花括号占位的功能。【转自】...
  • printf()是一种C语言标准库函数,用于将格式化的字符串输出到标准输出. 标准输出是标准输出文件,与终端的屏幕相对应. 在stdio.h头文件中声明了printf().功能原型:int printf ( const char * format, ... );返回值: ...
  • c语言的%e格式输出

    千次阅读 2021-05-22 13:03:17
    c语言的%e格式输出答案:2信息版本:手机版解决时间 2019-10-07 00:52已解决2019-10-06 06:52c语言的%e格式输出最佳答案2019-10-06 08:32一、 Printf 输出格式C中格式字符串的一般形式为: %[标志][输出最小宽度]...
  • C语言转义字符和格式控制参考转义字符参考:\a:蜂鸣,响铃\b:回退:向后退一格\f:换页\n:换行,光标到下行行首\r:回车,光标到本行行首\t:水平制表\v:垂直制表\\:反斜杠\':单引号\":引号\?:问号\ddd:三位八进制\...
  • C输入输出格式符

    2020-12-23 19:37:34
    常见的以进制输入输出的格式符有: %d:十进制整数 %o:八进制整数 %x或者%X:十六进制整数 常见的以数据类型输入输出的格式符有: ...%lf:双精度浮点型(默认保留6位小数),即double型 %c...
  • C语言中,用关键字( )定义单精度实型变量,用关键字( )定义双精度实型变量。答:float double通电导线在磁场中的受力方向遵守左手定则。答:对中国大学MOOC: 国赛答辩的开头也很重要,要做好开头,可从( )等方面入手...
  • C语言printf格式控制介绍 C语言中非常重要的两个函数,输入函数(scanf,功能是通过键盘给程序中的变量赋值)输出函数(printf,功能是将程序运行的结果输出到屏幕上),如果在程序中要使用 printf 或者 scanf,...
  • 下图来源于唐朔飞老师的计算机组成原理,229页。 “可见浮点数由阶码j和尾数S两部分组成。阶码是整数,阶和阶码的位数m合起来...对于长实数(总位数64位),阶码取11位(含阶一位),尾数取53位(含数.
  • 格式 功能 进制 %d int 按整型数据的实际长度输出 十进制 %ld long (int) 按整型数据的实际长度输出 十进制 %lld long long (int) 按整型数据的实际长度输出 十进制...
  • *其中格式控制字符串指定输出格式,由格式字符串和非格式字符串构成 格式串以%开头的字符串,%后面跟各种格式字符,以说明输出数据的类型,形式,长度,小数位数等 非格式串原样输出 #include<iostream> ...
  • 转义字符参考:\a:蜂鸣,响铃\b:回退:向后退一格\f:换页\n:换行,光标到下行行首\r:回车,光标到本行行首\t:水平制表\v:垂直制表\\:反斜杠\':单引号\":引号\?:问号\ddd:三位八进制\xhh:二位十六进制\0:空字符...
  • 输入c,然后加个取地址成 &c。这时候可以看到c变量的地址 (3)打开内存查看窗口(VC6.0打开位置同上面的查看窗口,快捷键Alt+6),由于c double型是4个字节长度,所以在内存查看窗口内右键选第三项long Hex ...
  • OP想要“具有最大精度的打印(或至少到最重要的十进制)”。一个简单的例子是打印七分之一,如下所示:#includeintDigs=DECIMAL_DIG;doubleOneSeventh=1.0/7.0;printf("%.*e\n",Digs,OneSeventh);//1....
  • printf 的格式 printf 函数的原型为: # include <stdio.h> int printf(const char *format, ...); 在讲每一个函数的时候都会先把它的函数原型写出来,这个原型你们现在看不懂不要紧,等到学完C语言之后再...
  • 输入一个字符,一个数字,一个单精度浮点数,一个双精度浮点数,按顺序输出它们四个 且数字指定占4个字符宽靠右对齐,单精度浮点数保留2位小数,双精度保留12位小数,占一行输出、空格分隔 #include<stdio.h> ...
  • C语言之格式占位

    2021-08-10 14:36:30
    1、格式占位(%) 是在C/C++语言中格式输入输出函数,其意义就是起到格式占位的意思,表示在该位置有输入或者输出 ...%f 输入单、双精度浮点数 %s 输入字符串 %c 输入单个字符 %p 输入指针的值 %fL 输入长浮点
  • java 占位的问题

    2021-03-08 07:08:41
    package main;... import java.io.IOException;...这个%d占位 报错 报错如下,数字都打印出来了,但是这个占位貌似报错了1 2 3 4 5 6 7 8 9 java.lang.IllegalArgumentException: Malformed escape pair at index 68: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,255
精华内容 28,902
关键字:

双精度格式符