相关疑难解决方法(0)

将数字截断到指定的小数位

我需要将一个数字截断到2位小数,这基本上意味着要删除多余的数字.

例如:

2.919     ->      2.91

2.91111   ->     2.91
Run Code Online (Sandbox Code Playgroud)

为什么?这是SQL Server在存储多个特定精度时正在执行的操作.例如,如果列是十进制(8,2),并且您尝试插入/更新9.1234的数字,则将切断3和4.

我需要在c#代码中做同样的事情.

我能想到的唯一可能的方法是:

  1. 使用stringformatter将其"打印"出两个小数位,然后将其转换为小数,例如:

      decimal tooManyDigits = 2.1345
    
    decimal ShorterDigits = Convert.ToDecimal(tooManyDigits.ToString("0.##"));
    
    // ShorterDigits is now 2.13
    
    Run Code Online (Sandbox Code Playgroud)

    我对此不满意,因为它涉及到一个字符串,然后是另一个字符串到十进制转换,这看起来有点疯狂.

  2. 使用Math.Truncate(只接受一个整数),所以我可以将它乘以100,截断它,然后除以100.例如:

    decimal tooLongDecimal = 2.1235;
    
    tooLongDecimal = Math.Truncate(tooLongDecimal * 100) / 100;
    
    Run Code Online (Sandbox Code Playgroud)

    我对此也不满意,因为如果tooLongDecimal为0,我将得到除以0的错误.

当然有更好的+更简单的方法!有什么建议?

c#

9
推荐指数
2
解决办法
4996
查看次数

计算舍入为cobol

我对cobol中的计算函数的舍入感到困惑.

宣言:

VAR-A      PIC  S9(9)V99 COMP-3.
VAR-B      PIC  S9(9)V9(6) COMP-3.
Run Code Online (Sandbox Code Playgroud)

程序.

MOVE +12.08 TO VAR-A.
MOVE +6.181657 TO VAR-B.


COMPUTE VAR-A ROUNDED = VAR-A + VAR-B.
Run Code Online (Sandbox Code Playgroud)

VAR-A的结果是18.27还是18.26?cobol会对计算做什么?它会将VAR-B首先舍入到VAR-A中指定的小数位,还是将cobol添加2个变量然后将它们四舍五入到VAR-A中指定的小数位?

任何帮助将不胜感激.

@NealB,

这个例子怎么样:

宣言:

01  VAR-ARRAY  OCCURS 22 TIMES.
    03  VAR-A      PIC  S9(9)V9(6) COMP-3.


01  VAR-B      PIC  S9(9)V99 COMP-3.
Run Code Online (Sandbox Code Playgroud)

假设VAR-A是一个数组,其值如下:

VAR-A(01) =  123.164612
VAR-A(02) =  12.07865
VAR-A(03) =  6.181657
VAR-A(04) =  1.744353
VAR-A(05) =  6.118182
VAR-A(06) =  1.744353
VAR-A(07) =  6.158715
VAR-A(08) =  1.744353
VAR-A(09) =  6.194759
VAR-A(10) =  1.744353
VAR-A(11) =  3.037896 …
Run Code Online (Sandbox Code Playgroud)

cobol

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

标签 统计

c# ×1

cobol ×1